code tut nicht



  • hi

    dieser code tut nicht:

    //main.cpp
    int main()
    {
      int beispiel = bigger<5, 3>;
    }
    
    //test.h
    template<int a, int b>
    struct bigger
    {static int value;}
    
    //test.cpp
    template<int a, int b>
    bigger<a, b>::value = a > b ? a : b;
    

    mein compiler (visual studio 2008 express) gibt mir das aus:

    1>main.cpp
    1>c:\test\test\main.cpp(4) : error C2065: 'bigger': nichtdeklarierter Bezeichner
    1>c:\test\test\main.cpp(4) : error C2059: Syntaxfehler: ';'
    1>test.cpp
    1>c:\test\test\test.cpp(2) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
    1>c:\test\test\test.cpp(2) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\test\test\test.cpp(2) : error C2988: Unerkannte Vorlagendeklaration/-definition
    1>c:\test\test\test.cpp(2) : error C2059: Syntaxfehler: '<'
    1>c:\test\test\test.cpp(2) : error C2039: 'value': Ist kein Element von '`global namespace''
    1>Code wird generiert...
    1>Das Buildprotokoll wurde unter "file://c:\test\test\Debug\BuildLog.htm" gespeichert.
    1>test - 7 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • ach ja in der main.cpp steht auch noch #include <test.h>



  • //test.h
    template<int a, int b>
    struct bigger
    {static int value;};//Semikolon vergessen
    
    //test.cpp//kannste vergessen
    template<int a, int b>
    int bigger<a, b>::value = a > b ? a : b;//int vergessen
    
    //main.cpp
    int main()
    {
      int beispiel = bigger<5, 3>::value;//::value vergessen
    }
    


  • Statt static int value; kannst du auch gleich enum { value = a < b ? a : b }; schreiben.



  • wxSkip schrieb:

    Statt static int value; kannst du auch gleich enum { value = a < b ? a : b }; schreiben.

    Noch lieber [c]static int const value[/c] und auch inline initialisieren.



  • volkard schrieb:

    wxSkip schrieb:

    Statt static int value; kannst du auch gleich enum { value = a < b ? a : b }; schreiben.

    Noch lieber [c]static int const value[/c] und auch inline initialisieren.

    Dann ist laut diesem Thread die Deklaration (wie sagt man dazu? Externe Deklaration?) der Konstante aber trotzdem erforderlich:
    http://www.c-plusplus.net/forum/p2068470#2068470



  • wxSkip schrieb:

    volkard schrieb:

    wxSkip schrieb:

    Statt static int value; kannst du auch gleich enum { value = a < b ? a : b }; schreiben.

    Noch lieber [c]static int const value[/c] und auch inline initialisieren.

    Dann ist laut diesem Thread die Deklaration (wie sagt man dazu? Externe Deklaration?) der Konstante aber trotzdem erforderlich:
    http://www.c-plusplus.net/forum/p2068470#2068470

    Nur wenn die Konstante irgendwo "ODR used" wird. Also in einem Kontext verwendet, wo sie nicht sofort in eine Rvalue verwandelt wird.
    z.B. wenn man die Adresse davon nehmen würde.


Anmelden zum Antworten