Ich wollte Schlacht Spiel schreiben, aber ich habe einige Probleme, wenn es Aspekt OOP kommt ... Zunächst einmal habe ich Battlefield
KlassePassing Klassenattribut funktionieren
class Battlefield
{
private:
string **array;
public:
Battlefield();
~Battlefield();
void createBattlefield();
void drawBattlefield();
string getArray();
};
Constructor
Battlefield::Battlefield()
{
array = new string*[12];
for (int i = 0; i < 12; i++){
array[i] = new string[12];
}
}
getArray()
string Battlefield::getArray()
{
return **array;
}
Zweite Klasse ist Game
, wo bis jetzt bekam ich nur eine Methode shoot()
void Game::shoot(string **array)
{
char row;
int column;
cout << endl << "Row (A, B, ... , J): ";
do{
cin >> row;
if (islower(row)) row = toupper(row);
if (row > 'J' || row < 'A'){
cout << "Row out of range!" << endl << "Try again: ";
}
} while (row > 'J' || row < 'A');
cout << "Column (1, 2, ... , 10): ";
do{
cin >> column;
if (column > 10 || column < 1){
cout << "Column out of range!" << endl << "Try again: ";
}
} while (column > 10 || column < 1);
array[(int)(row - 64)][column] = "[.]";
}
Welche basicly nur Orte [.] In array [x] [y] Aber Im habe Probleme bekommen dies zu zusammenarbeiten, um in main
int main()
{
Battlefield array;
Game game;
array.createBattlefield();
game.shoot(array.getArray());
}
letzte Zeile verursacht
Fehler C2664: 'Leeres Spiel :: schießen (std :: string **)': kann nicht Argument 1 von 'std :: string' auf 'std :: string **'
Die Fehlermeldung sehr klar sein sollte, wenn man es nur lesen. Denken Sie darüber nach, was 'getArray' *** wirklich *** zurückgibt. Hinweis: Es ist kein Array. –
In einer etwas verwandten Anmerkung, wenn Sie eine feste Größe Anzahl von Strings und Arrays von Strings zuweisen, dann empfehle ich ['std :: array'] (http://en.cppreference.com/w/cpp/container/array) stattdessen. –
Verwenden Sie nicht "neu", bevor Sie mindestens 20 Jahre Erfahrung in C++ haben. – nwp