2016-12-20 13 views
0

Im dieses Commandline-basierten Spiel zu machen versucht, genannt „Dungeoncrawl“ in ObjectOrientedProgramming ... Ich habe eine Header & Quelldatei erstellt, dann habe ich erklärte Funktionen und die Klasse in Header-Datei, und Definitionen sind auf die Quelldatei.C++ Druck 2d Array

Das Problem: Wenn ich das Board mit 2 for-Schleifen in einer Void-Funktion drucken, druckt es einige zufällige ganze Zahlen statt nur 0'en ...

Ergebnis nach dem Druck:

0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 1303831201 100681557 
1606416496 32767 17 0 1 0 104 1 1606581343 32767 
1606416256 32767 1606423158 32767 1606416280 32767 1606416280 32767 1 0 
1606416304 32767 0 1 0 0 1606416320 32767 0 0 
0 0 0 0 0 0 0 0 1606416288 32767 

Diese Datei ist der Header:

#ifndef dungeoncrawl_hpp 
#define dungeoncrawl_hpp 
#include <iostream> 
#include <stdio.h> 

using namespace std; 

class dungeoncrawl { 
public: 
    dungeoncrawl(); 
    void drawBoard(); 
    ~dungeoncrawl(); 
private: 
    int board[10][10]; 
    uint8_t player_pos[0][0], enemy_pos[0][0]; 

}; 

#endif /* dungeoncrawl_hpp */ 

und hier ist die Quelldatei:

#include "dungeoncrawl.hpp" 

// Constructor 
class dungeoncrawl::dungeoncrawl { 
    int board[10][10] = { 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0,0,0} 
    }; 
}; 

// Con-&-Destructor 
dungeoncrawl::dungeoncrawl(){} 
dungeoncrawl::~dungeoncrawl(){} 

void dungeoncrawl::drawBoard(){ 
    for(int i = 0; i < 10; i++){ 
     for(int j = 0; j < 10; j++){ 
      cout << board[i][j] << " "; 
     } 
     cout << endl; 
    } 
}; 
+4

'int board [10] [10]', die Sie deklariert und initialisiert in 'dungeoncrawl' Konstruktor eine lokale Variable, die völlig unabhängig von der Variablen dieses This-board-Members ist, die selbst nie initialisiert wird und zufälligen Müll enthält. –

+0

Sie überschatten Ihre eigene Variable und versäumen, die echte Variable zu initialisieren. Wenn Sie einen einfachen "std :: vector" mit 100 Elementen verwenden würden, wäre Ihr Code viel mehr C++ und Sie könnten tatsächlich eine kostenlose Initialisierung erhalten. – tadman

+1

'// Constructor'' class dungeoncrawl :: dungeoncrawl' - Nein, das glaube ich nicht. – IInspectable

Antwort

1

Es gibt zwei Fehler in Ihrem Code. Zuerst:

uint8_t player_pos[0][0], enemy_pos[0][0]; 

Zero-Length-Arrays werden von gcc als Erweiterung angeboten. Es ist in deinem Fall nutzlos.

Zweitens:

class dungeoncrawl::dungeoncrawl { 

Es ist kein construstor. Wenn Sie das Klassenmitglied initialisieren möchten, können Sie dies in einem Konstruktor tun. Wie hier:

// Constructor 
dungeoncrawl::dungeoncrawl(){ 
    for(int i = 0; i < 10; i++){ 
     for(int j = 0; j < 10; j++){ 
      board[i][j] = 0; 
     } 
    } 
} 

Oder zum Beispiel Sie das Array als statisch deklarieren:

//dungeoncrawl.hpp 
private:   
    static int board[10][10]; 

//dungeoncrawl.cpp 
int dungeoncrawl::board[10][10] = { 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0} 
};