Gå til innhold

Problemer med tilordning til multidimensjonelt array


Anbefalte innlegg

Jeg er nybegynner i c++.

 

Projektet mitt er å programmere brettspillet mil med en console GUI. Jeg har lagret spillebrettet i et 2-dimensjonalt array. Jeg bruker visual studio.

 

Jeg har to klasser. Den ene er main og gjør ingenting annet enn å kalle på DrawBoard-klassen. DrawBoard inneholder arrayet med spillebrettet, samt en funksjon til å skrive det ut. I tillegg har jeg en header fil som deklarer ting jeg bruker. Når jeg bruker drawBoard() til å skrive ut spillebrettet, får jeg bare masse gibberish, helt til jeg flyttet arrayen inn i blokken til utskrivningsfunksjonen. Dette er ikke hensiktsmessig for da får jeg ikke forandret på den.

 

Main:

#include "DrawingBoard.h"

#include <iostream>

using namespace std;

 

int main(){

int input;

DrawingBoard db;

db.drawBoard();

cin>>input;

return(0);

}

 

Header fil:

class DrawingBoard

{

public:

DrawingBoard(void);

void moveTo(int a, char b);

void drawBoard();

char theBoard[14][31];

private:

int msg;

};

 

Resten av DrawingBoard:

 

#include "DrawingBoard.h"

#include <iostream>

using namespace std;

 

DrawingBoard::DrawingBoard(void)

char theBoardInit[14][31] = {

{' ','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_',' '},

{'|','1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','2','|',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','3','|'},

{'|',' ',' ',' ',' ',' ','_','_','_','_','_','_','_','_','_','|' //Lang oppramsing av brettet som jeg vet funker

 

for (int uiRow = 0; uiRow < 14; ++uiRow) {

for (int uiCol = 0; uiCol < 31; ++uiCol) {

theBoard[uiRow][uiCol] = theBoardInit[uiRow][uiCol];

}

}

}

 

void DrawingBoard::drawBoard(){

for(int i=0;i<14;i++)

{

for(int j=0;j<31;j++)

{

cout<<theBoard[j];

}

cout<<endl;

}

cin>>msg;

}

Endret av Ringstadjr
Lenke til kommentar
Videoannonse
Annonse

Feilen er at arrayet du definerer i DrawingBoard-kildefilen vil slik som du har skrevet det være en global variabel. drawBoard-funksjonen henter theBoard-variabelen som er definert i header-filen siden den er en del av DrawingBoard-klassen og funksjonen printer da ut et array der variablene ikke er initialisert, og du får ut tilfeldig data.

 

Ville det ikke vært mer logisk å bruke 3 arrays (anbefaler å bruke std::vector i stedet for arrays) med 8 elementer, en for ytterste, en for midterste og en for innerste "firkant"?

Blir litt mer koplisert å printe brettet, men ellers er det mye mer ryddig for spill-logikken.

Endret av Dinosauromann
Lenke til kommentar

Har forsåvidt skjønt at problemet er at arrayet ikke er initialisert sett fra scopet til drawBoard(). Problemet er hvordan jeg skal kunne tilordne arrayet en verdi fra constructoren. Er ikke dette mulig i c++. Ganske sikker på at det ville vært mulig i for eksempel Java. Det er i alle fall det linjen

 

char theBoard[14][31] = {...}

 

er et forsøk på. Det ser ut for meg som om jeg deklarerer variabelen på nytt, men jeg har ikke funnet noen annen syntaks på det.

 

Jeg har ikke brukt vektor fordi jeg ikke er kommet så langt. Kan godt hende det er et bedre alternativ, men skulle gjerne fått dette til først. Det ville vært lærerikt.

 

Forslaget ditt med å bruke 3 arrays skjønte jeg ikke helt.

Lenke til kommentar

Fant en slags løsning på det. Laget en ny multidimensjonell array som jeg initialiserte i constructoren. Så gikk jeg gjennom den og satte den lik den jeg allerede hadde deklarert i header-filen ved hjelp av to løkker. Ganske tungvindt. Burde finnes en bedre løsning.

 

For de som lurer på løsningen så har jeg markert endringene i den opprinnelige koden med fet skrift:

 

for (int uiRow = 0; uiRow < 14; ++uiRow) {

for (int uiCol = 0; uiCol < 31; ++uiCol) {

theBoard[uiRow][uiCol] = theBoardInit[uiRow][uiCol];

}

}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...