klassen protypen funktionieren nicht



  • hier ist ein beispielcode meines problems:

    class klasse1;
    klasse1 objekt1;
    
    class klasse1{
    int i;
    void func(){
    printf("lol");
    }
    
    };
    

    error C2079: 'objekt1' verwendet undefiniertes class 'klasse1'
    nun frage ich mich weshalb ich das objekt nicht erstellen, kann, obwohl ich doch einen prototypen erstellt habe.



  • Du hast keinen Prototypen erstellt,

    class klasse1;
    

    ist bloss eine Vorwaertsdeklaration (Forward Declaration).Der Compiler weiss dann bloss, dass es eine Klasse "klasse1" gibt aber nicht wie sie aussieht. Da er nicht weiss wie sie aussieht kannst du kein Objekt davon erstellen, er weiss ja nicht wie viel Speicher er dafuer anlegen muss. Es gibt zwei Loesungen.

    Du machst "objekt1" zu einem Zeiger. Das geht, denn der Compiler weiss dann wie viel Speicher er fuer einen Zeiger braucht. Das sieht dann so aus:

    class klasse1;
    klasse1* objekt1;
    
    class klasse1
    {
    	int i;
    	void func()
    	{
    		printf("lol");
    	}
    
    };
    

    Du musst dann natuerlich objekt1 noch initialisieren. Ich nehme allerdings an, dass du keinen Zeiger moechtest, deshalb gibt es Moeglichkeit 2.

    Du erstellst einen "Prototypen" fuer die Klasse. Normalerweise nennt man das einfach die Klasendeklaration. Und die Definition der Methoden gibst du spaeter an, hier der Code:

    class klasse1
    {
    	int i;
    	void func();
    };
    
    klasse1 objekt1;
    
    void klasse1::func()
    {
    	printf("lol"); // printf ist kein C++ sondern C, nimm std::cout
    }
    

    Ich denke du moechtest Moegichkeit 2 😉



  • danke probiers aus



  • oder auch mit ein bisschen mehr C++-Standard-Terminologie:

    // hier weiß der Compiler noch nichts von einem Typ dings
    
    class dings;  // <-- das ist eine DeKLARAtion von dings
    
    // hier weiß der Compiler, dass es einen Klassen-Typ dings gibt
    // Der Typ ist aber UNVOLLSTÄNDIG.
    
    dings myfunction(dings p); // <-- Für diese FunktionsDeKLARAtion
                               // reicht, dass dings unvollständig ist
    
    dings* ptr = 0;  // Definition eines Zeigers. dings
                     // muss hier auch nicht vollständig sein
    
    class dings { // Das hier ist eine
      int foo;    // DeFINItion
    };            // von dings
    
    // Hier ist der Typ VOLLSTÄNDIG
    
    dings xxx;    // Das ist eine Definition von xxx
                  // Für eine solche Definition muss der Typ
                  // VOLLSTÄNDIG sein.
    
    dings myfunction(dings p)  // Für diese FunktionsdeFINItion
    {                          // muss dem Compiler dings vollständig bekannt sein.
      return p;                // Auch an Stellen, wo Du die Funktion aufrufen
    }                          // willst, muss der Typ vollständig sein.
    


  • ok, danke


Anmelden zum Antworten