Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.08.2004, 12:47 Titel: Ich liebe diesen Fehler |
|
|
Hi,
Was ist der beliebsteste Fehler der meisten Programmierer (mit VS)?
Genau, unaufgelöstes externes Symbol
Und genau da hab ich ein ganz tolles Problem, und weiss nicht woran es liegt.
ich habe in einer Headerdatei eine Klasse
Code: |
class A {
public:
static A alles[20];
int c;
}
|
Davon will cih dann den Wert von c in einem der Objekte auslesen, genaugenommen bei WM_Paint:
Code: |
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
Rectangle(0,A::alles[2].c,0,A::alles[2].c);
EndPaint(hWnd, &ps);
break;
|
Naja, und dann sagt mir der Compiller etwas von einem unaufgelösten externen Symbol public: static class A(*A alles)[20]...
Weiss jemand was es daran stört? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 18.08.2004, 12:58 Titel: |
|
|
Hast du denn eine Instanz der Klasse erstellt?
Ich kenn mich mit static noch nicht so aus, aber ich denke, mindestens eine Instanz musst du haben:
Code: | A myclass;
myclass.foo(); |
PS: Bist du dir überhaupt sicher, dass die Klasse funktioniert?
Kann man denn in einer Klasse eine Memberklasse aus der aktuellen bilden?
Code: | class A {
};
class B {
A member;
}; |
So ginge das sicher, aber wenn du in B eine Instanz der Klasse B haben wolltest, dann gäbe das ja sozusagen eine Endlosdefinition, weil diese Memberklasse ihrerseits wieder eine Memberklasse von B hat.
PS: Übrigens...Semikolon hinter der Klassendefinition nicht vergessen _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.08.2004, 13:13 Titel: |
|
|
AFAIK kann man das, zumindest wenn es static ist, dann ändert es ja nix daran das man nur diese 20 Instanzen hat. |
|
Nach oben |
|
|
C++Builder Senior JLI'ler
Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 18.08.2004, 13:20 Titel: |
|
|
hat das vlt was mit dem Konstruktor zu tun? das er versucht den Konstruktor aufzurufen, den gibt es aber nicht und deshalb ein nicht aufgelöstes Symbol. Aber eigentlich gibt es doch einen Standartkonstruktor? |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.08.2004, 14:00 Titel: |
|
|
Nein, der Konstruktor ist OK. Bei dem tut alles, ich hab in dem Programm selbst auch schon auf diese Instanzen zugegriffen, halt aus der selben Klasse heraus. Das Problem taucht nur dabei auf. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.08.2004, 14:58 Titel: |
|
|
Du musst die statische Variable initailisieren:
Code: |
class A {
public:
static A alles[20];
int c;
};
A A::alles[];
void x(void)
{
int z = A::alles[0].c;
}
|
C. |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.08.2004, 15:10 Titel: |
|
|
Ich steh grad glaub ich ein bisschen auf der Leitung, kannst du das etwas ausführlicher erklären?
Neu ist ja diese Zeile:
A A::alles[];
Aber was genau macht man in der Zeile? Bzw. welche Bedeutung hat das A vor A::alles[]? |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.08.2004, 15:30 Titel: |
|
|
Schön wäre gewesen, wenn du verraten hättest, ob es geht. Es sollt gehen. Du musst den Compiler klar machen, dass die static Variable "initialisiert" ist (gibt es einen Begriff für, fällt mir nicht ein). Dass muss du immer mit statischen Klassenvariablen machen. das A davor ist der Typ.
class X
{
static int i;
};
int X::i = 10;
C. |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.08.2004, 16:04 Titel: |
|
|
Die "Antwort" des Compillers darauf ist:
"alles" Feldindex fehlt
A::alles Definition oder Neudeklaration im aktuellen Gültigkeitsbereich unzulässig |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 18.08.2004, 16:18 Titel: |
|
|
Probier mal
Code: |
for(int i=0;i<20;++i)
{
A A::alles[i] = 0;
}
|
anstatt
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.08.2004, 17:20 Titel: |
|
|
Mit VS 2003 geht es. Hast du VS6 ?
Edit: Es kompiliert auch in VC6 - was macht du?
Code: |
class A {
public:
static A alles[20];
int c;
};
A A::alles[];
void x(void)
{
int z = A::alles[0].c;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
// ZU ERLEDIGEN: Fügen Sie hier den Code ein.
x();
return 0;
}
|
|
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.08.2004, 20:03 Titel: |
|
|
Geht das auch in der Klasse selbst?
Wenn ich das da mach erhalt ich auf jeden Fall die Sache mit dem Feldindexdingsbums |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.08.2004, 20:17 Titel: |
|
|
In der Klasse selbst geht es auf jeden Fall nicht mit VC6. Ich bekomme mit dem Code oben keinen Fehler, weder in VC6 noch in VS2003.
C. |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.08.2004, 20:40 Titel: |
|
|
Ic hweiss, habs auch getestet. Áber ich brauch die Definition in der Klasse, da ich sonst nicht in einer statischen Funktion glaich daraufzugreifen kann. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.08.2004, 21:31 Titel: |
|
|
Verstehe ich nicht? Warum nicht? Wie soll das denn aussehen? |
|
Nach oben |
|
|
|