C2039-Error < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:29 Do 14.01.2010 | Autor: | qsxqsx |
Hallo,
Vielleicht sage ich erstmals grundsätzlich um was es sich handelt: Ich habe die Aufgabe ein Sudokulöser zu programmieren. Ich bin jetzt auch fast fertig, hab aber noch einen Compilererror, bei dem ich durch suchen im Internet einfach nicht schlauer werden kann.
Ich habe zuerst mal das Programm die leeren Felder suchen lassen, und mir gesagt, für jedes Feld mach ich ein struct, welches die x-koordinate, die y-koordinate des Feldes enthält und in einem Array die möglichen Zahlen für dieses Feld reinschreibe, damit ich nacher bequem darauf zugreifen kann.
Es gibt also ein Array, welches soviele structs wie leere Felder beinhalten soll(dieses Array ist dynamisch), als auch in jedem dieser structs wieder in Array(nicht dynamisch) mit den möglichen Nummern.
struct emptycells
{
int xc; // x-koordinate
int yc ; // y-koordinate
int possiblenumbers [9] = {1,2,3,4,5,6,7,8,9};
// array with the possible numbers
};
error C2039: 'possiblenumbers': Ist kein Element von 'solve::emptycells'
Siehe Deklaration von 'solve::emptycells'
...bei diesem struct soll jetzt was falsch sein, oder zumindest der Array possiblenumbers! Ich habe keine Ahnung wieso!
Auf einer Website stand zu diesem Fehler folgendes:
"Sie versuchen fälschlicherweise, einen Bezeichner als Element einer Struktur zu behandeln. Überprüfen sie ihre Deklarationen"
Wäre sehr froh über nen Tipp, wenner auch noch so klein ist...
Gruss
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:55 Do 14.01.2010 | Autor: | Frasier |
Hallo,
die Felder einer struct werden bei deren Erzeugung initialisiert.
Beispiel
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct emptycells {
int xc; // x-koordinate
int yc; // y-koordinate
int possiblenumbers[9];
};
int i;
struct emptycells c1={10,20,{3,6,0,8}};
printf("x: %d, y: %d, moegliche Zahlen: ",c1.xc,c1.yc);
for ( i=0; i<sizeof(c1.possiblenumbers)/sizeof(int); i++ )
printf("%d ", c1.possiblenumbers[i]);
return 0;
}
Was der Verweis auf solve zu bedeuten hat, keine Ahnung.
lg
F.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:19 Do 14.01.2010 | Autor: | Infinit |
Hallo qsxqsx,
soweit ich weiss, darf bei der Felddeklarartion kein Blank zwischen dem Feldnamen und der Feldgröße sein.
Viele Grüße,
Infinit
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:52 Do 14.01.2010 | Autor: | qsxqsx |
Ich danke beiden!
Also der Vorschlag von Frasier zeigt mir eigentlich nur, dass ich es vom Prinzip richtig gemacht habe. Habs jetzt noch ohne das Blank versucht, nützt auch nichts! Was ich herausgefunden habe ist, dass wenn ich
nur "int possiblenumbers[9];" schreibe (ohne die Geschweifte Klammer mit den Zahlen), dass es dann compiliert! ...nur ergeben sich dann eben andere Probleme...
Da Frasier sein Beispiel richtig ist, er aber anders auf die Elemente zugreift, kann es nur sein, dass ich da nachher falsch aufs struct bzw. den Array im struct zugreife.
Deshalb zeige ich hier wie ich den Pointer auf das struct mache und benutze, als auch wie ich den Array im struct benutze:
emptycells *cellpointer; //pointer auf struct,emptycells ist das struct
cellpointer = new emptycells;
((cellpointer + u )->possiblenumbers[g]) // so greife ich oft ein Element im Array, ist das richtig?! das u soll den pointer der auf das erste struct zeigt zu einem beliebigen struct setzen.
Bei diesem Zugriff tritt eben diese Fehlermeldung auf: 'possiblenumbers': Ist kein Element von 'solve::emptycells'
Ich habe mir schon überlegt, dass das possiblenumbers irgendwie nicht "global" definiert ist und ein "extern" vornedran gemacht...nütz auch nichts...
Ist doch eigentlich alles richtig, oder?
Gruss qsxqsx
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:33 Do 14.01.2010 | Autor: | qsxqsx |
Ich wollte sagen, dass es jetzt geht!
Das struct hat hier einen Konstruktor gebraucht, welchen man normalerweise nur bei Klassen braucht. Aufjedenfall geht es!
Hier der Konstruktor, falls es jemandem hilft:
emptycells() : xc(), yc() { for(int i = 0; i < 9; i++) possiblenumbers[i] = i+1; }
die Frage kann auf beantwortet gesetzt werden...
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 02:46 Fr 15.01.2010 | Autor: | felixf |
Hallo!
> Ich wollte sagen, dass es jetzt geht!
>
> Das struct hat hier einen Konstruktor gebraucht, welchen
> man normalerweise nur bei Klassen braucht. Aufjedenfall
> geht es!
Genau. Du kannst in einer Strukturdefinition nicht schon Werte vorgeben.
(Strukturen und Klassen sind uebrigens in C++ das gleiche -- der einzige Unterschied ist, dass in Klassen alles private ist soweit nicht anders gesagt, und in Strukturen alles public.)
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 02:44 Fr 15.01.2010 | Autor: | felixf |
Hallo Infinit,
> soweit ich weiss, darf bei der Felddeklarartion kein Blank
> zwischen dem Feldnamen und der Feldgröße sein.
das stimmt nicht, da darf man beliebig viele Leerzeichen einfuegen. Darf man eigentlich so gut wie ueberall.
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 08:40 Sa 16.01.2010 | Autor: | Infinit |
Hallo felix,
danke für diese Info. Dann sind die heutigen Compiler nicht mehr so kniggerig wie noch zu meinen Studienzeiten.
Viele Grüße,
Infinit
|
|
|
|