Deklaration eines zweidimensionalen boolschen Array
-
Dann bekomme ich
|22|error: no match for 'operator[]' in '((std::vector<bool>*)ships)->std::vector<bool, _Alloc>::operator[] [with _Alloc = std::allocator<bool>, std::vector<bool, _Alloc>::reference = std::_Bit_reference, std::vector<bool, _Alloc>::size_type = unsigned int](((unsigned int)x))[y]'|Warum kann man das denn nicht mit .at() lösen? Ich dachte, das wäre besser?
-
(std::vector<bool>*)shipsWas soll das * da?
Aber worauf ich noch gar nicht eingegangen bin: vector<bool> hat leider nicht allzu viel mit vector<andererTyp> zu tun. Du könntest statt bool z. B. int verwenden, um den "normalen" vector zu verwenden.
Ob du dann ships[x][y] oder ships.at(x).at(y) benutzt, unterscheidet sich nur in der zusätzlichen Überprüfung bei at, ob der Parameter nicht zu groß oder zu klein ist.
-
Ich habe das nicht so geschrieben
void setShip(HANDLE set, vector<bool>& ships, int x, int y){ ships[x][y]=true; setCursor (set, x, y), cout << 'S';Ich würde aber gerne weiterhin ein boolsches Array nutzen. Wenn das mit vector sinnlos ist, würde ich dann gerne wieder bool array[int][int] verwenden. Aber dann bleibt wieder das Problem mit der Übergabe in die Funktion.
-
Nicht vector<bool>, sondern vector<vector<bool> >.
Du kannst vector<vector<bool> > benutzen. Ich weiß da zwar nicht das komplette Verhalten auswendig, aber für deine Zwecke reicht das. Ansonsten nimmst du halt einfach vector<deque<bool> >.
-
Ich habs jetzt nochmal ohne vector versucht und bekomme schon wieder einen Fehler. Ich werd noch irre!
void editField(HANDLE set, bool** ships) [ ... ] bool ships[80][25]; editField(set, ships); // |error: cannot convert 'bool (*)[25]' to 'bool**' for argument '2' to 'void editField(void*, bool**)'|Falls das irgendwann erledigt sein sollte, hätte ich noch die Frage, ob es eine Funktion gibt, die ein Array mit einem immer gleichen Wert füllt.
-
void editField(HANDLE set, bool (*ships)[25])//<<<<<<<<<<<< [ ... ] bool ships[80][25]; editField(set, ships);
memset(&array, wert, anzahl;)

-
Ah endlich keinen Fehler
Danke an Dich und Michael E. Auch für memset.Wobei ich
bool (*ships)[25]von der Form her etwas unglücklich finde

-
Nimm nicht
memset(). Lieberstd::fill(), das kann auch mit C++-Objekten (Nicht-PODs) sowie mit STL-Contiainern umgehen. Nicht dass du dir Dinge aneignest, die später nicht funktionieren.lemon03 schrieb:
Wobei ich
bool (*ships)[25]von der Form her etwas unglücklich finde

Das ist halt, wenn man mit rohen Arrays arbeitet. Da gibts etliche Sonderregeln und kaum irgendwo normale Wertsemantik. Willst du wie gewohnt arbeiten (und zusätzliche Features wie Debug-Unterstützung nutzen), nimm
std::tr1::array. Dann kannst du eine normale Referenz nehmen.
-
Für fill() muss ich doch wieder vector nutzen? Da gabs doch die ganze Zeit Fehler. Und für tr1::array weiß ich mal wieder nicht, wie man das für ein mehrdimensionales Array nutzt.
-
Nein,
std::fill()funktioniert auch mit Arrays.#include <algorithm> int main() { const int size = 5; int array[size]; std::fill(array, array+size, 42); }
-
Ok danke, wieder etwas zu gelernt
