no match for operator '++' in ......
-
Hey,
ich stehe wieder vor einem mehr oder weniger interressantem Problem:
ich habe ein Array, dieses Array hat Daten auf die ich in einer Methode direkt zugreifen möchte, sprich ich kann das ganze nicht per 'return' Anweisung machen -> also muss ich das ganze per Referenz übergeben.... und jetzt kommt mein Problem: ich kann nur einen Zeiger auf die 0-Stelle des Arrays übergeben..... nun... dachte ich mir, macht nix schreibe ich mir eine for-schleife in der ich die Adressen in einem neuen Array speicher (es ist für die Methode unabdingbar das ich mit einem Array arbeite)... nja... leider hat sich das Problem dabei gestellt das der Operator '++' nicht exestiert geht(z.m. laut Fehlermeldung die mich ziemlich überrascht) und ich den Zeiger somit nicht auf die nächste Stelle incrementieren kann oO.. was nun meine ganze Schleife aus der Bahn wirft:void changecards(Card& Cadset/*Dis ist die Referenz auf einen Klassen-array*/,int& Cardsremain) { Card CardSetd[32]; for(int i = 0; i < Cardsremain; i++) { CardSetd[32] = Cadset; Cadset++; // und hier will der Zeiger einfach nich auf die nächste stelle oO }; };PS: gibt es eine effizientere Methode mein Problem zu lösen? Oder bleibt mir nichts anderes übrig als das so/so ählich zu machen?
PPS: reicht eine Addresse von einem Objekt um auf sämtliche Inhalte selbigen zureifen zu können
Greetz für die Hilfe Jud4s
-
Hey,
versuchs doch mal so, Alter:
void changecards(Card* Cadset/*Dies ist ein Zeiger auf das erste Array-Element*/,int& Cardsremain) { Card CardSetd[32]; for(int i = 0; i < Cardsremain; i++) { CardSetd[i] = *Cadset; // Aufpassen auf die Grenzen des Arrays, d.h. Cardsremain sollt nicht größer 32 werden können!! Cadset++; // und hier will der Zeiger einfach nich auf die nächste stelle oO }; };Aufruf einfach so
changecards(arrayname /* ohne weitere Zusätze */, anzahlCards);Ciao!
-
wenn die sich die referenz/pointer nicht ändern soll oder muss deklarisere die übergaben mal mit const... also:
void changecards(Card const* Cadset,int const& Cardsremain)hat den vorteil das dein compiler schon streikt falls du woraus zugreifen willst, was laut design nicht geht...
ansonsten würd ich mich auch meinem vorredner anschließen
-
es geht nicht um den Aufruf.... schon beim Compilieren streikt mein Compiler
ich brauche NUR einen Weg um den Zeiger der der Funktion übergeben wird zu inkrementieren.....
-
void changecards(Card& Cadset/*Dis ist die Referenz auf einen Klassen-array*/,int& CardsremainCadset ist eine Referenz, eine Referenz kann man nicht inkrementieren, ausser die dazugehörige Klasse besitzen einen entsprechenden Operator. Entweder übergibst du einen Zeiger oder löst es sonst wie

Grüssli
-
void changecards(Card* Cadset,int& Cardsremain) { Card CardSetd[32]; for(int i = 0; i < Cardsremain; i++) { CardSetd[32] = Cadset; Cadset++; // und hier will der Zeiger einfach nich auf die nächste stelle oO }; };so geht es jezz... ist halt nur ärgerlich, da ich nun daran denken muss einen Zeiger auf die entsprechende Klasse zu generieren um ihn dann zu übergeben... nja.... besser als wenns garnicht geht

-
Naja, anstatt einfach C Arrays zu verwenden, könntest du ja zum Beispiel einen std::vector verwenden oder eine Klasse Cardset machen und dann enstprechend darauf zugreifen. Oder gar ein boost::array verwenden usw. usf. Es gibt viele Möglichkeiten um auf den Zeiger zu verzichten und die ganze Sache auch etwas sicherer vor Abstürzen zu machen. Deiner Kreativität kannst du freien Lauf lassen, wenn dir die Funktion nicht gefällt

Grüssli
-
wie jz daran denken? was ist so schwer daran?
Card cardset; changecards (&cardset, 3456786543);aber:
Card CardSetd[32]; CardSetd[32] = Cadset;sollte nicht wirklich gehen...
und was soll deine funktion eigentlich so richtig machen? ich meine: unter dem namen kann ich mnir was vorstellen, aber das scheint sie nicht zu machen Oo
bb
-
oO... leider habe ich von vectoren und boost:arrays noch keine Ahnung
soweit bin ihc nicht.... aber danke für die information, ich werde mich danach eingehend mit vectoren auseinander setzen, scheinen ja für viele Dinge sehr nützlich zu sein....XD das ist nur der Anfang der Prozedur... der Name stimmt schon, und der Klassen-Array soll die Adressen auf die Richtigen Klassen (die alle eine Karte in einem 4Farben à 8 Karten Set darstellen) beinhalten, ich brauche diesen array, damit ich eine "Karte vom Stapel nehmen kann" und sie danach aus dem Stapel lösche, da ich sonst das Risiko habe, das ich Karten 2 mal austeile.....
-
Jud4s schrieb:
void changecards(Card* Cadset,int& Cardsremain) { Card CardSetd[32]; // ... CardSetd[32] = Cadset; // Zugriff ausserhalb Array Cadset++; // wieso?Ich versteh deswegen trotzdem nicht genau, was du willst... Wieso musst du
Cadseterhöhen? Und wofür brauchst du die Zählvariablei? Könntest du nicht mit der arbeiten?Jud4s schrieb:
ich werde mich danach eingehend mit vectoren auseinander setzen, scheinen ja für viele Dinge sehr nützlich zu sein....
In der Tat

-
Cadset ist der Pointer auf die 0-Stelle des Klassen-Arrays.... den muss ich erhöhen, damit ich auch auf alle stellen des Arrays einmal zeige....
Das mit der Zählariable i war ein dämlciher fehler von mir:
void changecards(Card* Cadset,int& Cardsremain) { Card* CardSetd[32]; for(int i = 0; i < 32; i++) { CardSetd[i] = Cadset; ++Cadset; }; };so geht es jezz
-
nja danke... ich glaube ich muss ein neuen Thread aufmachen um mein jetziges Probl zu lösen

-
machs doch einfach so:
void changecards(Card& Cadset,int& Cardsremain)
{
Card ptr = &Cadset;
Card CardSetd[32];
for(int i = 0; i < 32; i++)
CardSetd[i] = *ptr++;};
du übergibst die referenz und holst dir von der referenz einen zeiger

-
Witzbold
... ich kann dem ganzen aber keinen Array übergeben :(..... ihc bekomme einen Linkererror
-
boar...
na dann mach es doch ma so, wie du denkst (mit arrayübergabe)
und dann poste: die funktion an sich, den funktionsaufruf und die definition der übergebenen parameter an die futnkion...so schwer? Oo
-
oO Problem gelöst... war ein dämlicher Syntax-Fehler.... habe vergessen die Funktion einer Klasse zuzuordnen -.-