Ärger mit Arrays
-
Die Codezeile
char *karten = new char [2][32];
erzeugt bei mir folgenden Fehler:
error C2258: Ungueltige Syntax fuer rein virtuelle Methode; '= 0' erforderlich
Die codezeile steht im private Teil einer Klasse. Was ist daran falsch?
In meinem Buch ist ein beispiel mit nahezu der gleichen syntax und da funktioniert es.
Wie übergebe ich danach dieses array an eine funktion? Dazu hab ich leider gar kein Beispiel.
Könntet ihr kurz ein paar zeilen code posten damit ich die syntax dafür kenne?
Danke
-
char **karten=new char[2] for(size_t i=0;i<2;++i) karten[i]=new char[32];
oder noch besser
std::string *karten=new std::string[2];
oder wenn du auf new verzichten kannst
std::string karten[2];
-
Du willst ein 2-dimensionales Array erzeugen, also nimm einen Pointer auf Arrays:
siehe kingruendi - war zu doof gerad :D
Zur Übergabe an eine Funktion nimmste halt nen char** als Parameter...
Aus reiner Neugier: Kannst du mal bitte das Beispiel mit "nahezu der gleichen Syntax" posten?
-
C/C++ Code:
char **karten=new char[2]
for(size_t i=0;i<2;++i)
karten[i]=new char[32];Hier wird doch ein Zeigerarray erzeugt, das wiederum auf ein array zeigt.
Ist das nich was anderes als ein zweidimensionales array?
Ich hab schwierigkeiten das ** zu verstehen. Wofür das 2. *?
Das Beispiel das ich gesehen habe deklarierte ein eindimensionales array und hatte eine Klasse als typ und nicht char.Zur Übergabe an eine Funktion nimmste halt nen char** als Parameter...
und wie siehts mit dem Index aus? char** blabla[2][32] oder wie?
-
Schizzman schrieb:
error C2258: Ungueltige Syntax fuer rein virtuelle Methode; '= 0' erforderlich
Die codezeile steht im private Teil einer Klasse. Was ist daran falsch?Dass man Elementvariablen nicht in der Klassendefinition initialisieren darf. So wie ich dich verstehe, steht es da, und nicht innerhalb einer Funktion. Wenn nicht, poste einfach mehr Code.
Elementvariablen musst du in der Klassendefinition nur deklarieren ("char* karten") und ihnen dann im Konstruktor erst die von new[] zurückgegebenen Werte zuweisen. Wenn das Array immer gleich groß ist, kannst du allerdings auch gleich auf new[] verzichten und "char* karten[2][32]" nehmen. Dann musst du im Konstruktor der Klasse nur noch die einzelnen Werte zuweisen, da jeder Zeiger standardmäßig in einen undefinierten Bereich zeigt.
-
@ operator void:
Danke! Du hast Recht, das war der Fehler. Mann da hätte ich auch selbst drauf kommen müssenBleibt noch die Sache mit dem Funktionsaufruf und dem char**
-
Wenn die Funktion nur auf Arrays dieses einen Typs zugeschnitten ist, würde ich das so lösen:
typedef char* KartenArray[2][32]; class dingensbumens { KartenArray karten; // Hier die eigentlichen Daten }; void funktion(const KartenArray& karten) // Übergabe per const&, wie bei größeren Objekten üblich { }
C/C++-Arrays sind leider *vooorsichtig formulier* etwas umständlich. Ich denke, das ist die einfachste Lösung. Wenn die Funktion auch Arrays annehmen soll, die nicht [2][32] groß sind, musst du in der Tat mit noch mehr lustigen *** arbeiten, aber es sieht für mich jetzt nicht so aus.
-
KartenArray karten; // Hier die eigentlichen Daten
};void funktion(const KartenArray& karten) // Übergabe per const&, wie bei größeren Objekten üblich
Was bewirkt denn das KartenArray karten; ? Was ist mit dem index und was soll Karten überhaupt sein, genauergesagt was bewirkt der befehl? Almälig bin ich echt verwirrt.
-
Dann solltest du wohl in deinem Lieblingsbuch mal unter "typedef" nachschlagen