JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=2bd404ec0c5bf4794eb14e91564f1883Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Ich liebe diesen Fehler
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 12:47    Titel: Ich liebe diesen Fehler Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 12:58    Titel: Antworten mit Zitat

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 Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 13:13    Titel: Antworten mit Zitat

AFAIK kann man das, zumindest wenn es static ist, dann ändert es ja nix daran das man nur diese 20 Instanzen hat.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 13:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 14:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 14:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 15:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 15:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 16:04    Titel: Antworten mit Zitat

Die "Antwort" des Compillers darauf ist:

"alles" Feldindex fehlt
A::alles Definition oder Neudeklaration im aktuellen Gültigkeitsbereich unzulässig
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 16:18    Titel: Antworten mit Zitat

Probier mal

Code:

for(int i=0;i<20;++i)
{
       A A::alles[i] = 0;
}


anstatt

Code:

A A::alles[];
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 17:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 20:03    Titel: Antworten mit Zitat

Geht das auch in der Klasse selbst?
Wenn ich das da mach erhalt ich auf jeden Fall die Sache mit dem Feldindexdingsbums
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 20:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 20:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.08.2004, 21:31    Titel: Antworten mit Zitat

Verstehe ich nicht? Warum nicht? Wie soll das denn aussehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum