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#2068470Nur 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.