VC++ 6 Bug ?
-
Hallo ich nutze den VC++ 6 mit neustem Servicepack 6 (und STLFix).
Seltsamer Weise kann ich Funktionen nicht inline deklarieren, sonst kommt eine Fehlermeldung wegen eines Nichtaufgeloesten externem Symbols...
-
Funktionier das hier:
#include <iostream> using namespace std; inline void printtext () { cout << "TEXT" << endl; } int main () { printtext(); return 0; }
oder tauchen hier bereits Probleme auf? An den Projekteinstellungen gefummelt? Also meiner kann inline. Bis morgen, dann hab ich den neuen VC Architect wenn alles gut geht und mir die Schule endlich die Lizenz gibt
MfG SideWinder
-
Das geht, aber:
//testKlasse.h #ifndef _TESTKLASSE_H #define _TESTKLASSE_H class testKlasse { public: inline void print(); }; #endif
//testKlasse.cpp #include <iostream> #include "testKlasse.h" inline void testKlasse::print() { std::cout << "Test"; }
//inlineMain.cpp #include "testKlasse.h" int main() { testKlasse myTest; myTest.print(); return 0; }
geht nicht...
inlineMain.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall testKlasse::print(void)" (?print@testKlasse@@QAEXXZ)
Debug/inlineTest.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.
-
inline-Funktionen müssen in jeder Übersetzungseinheit, in der sie benutzt werden, definiert werden. Du kannst sie also nicht in eine eigene .cpp-Datei stecken.
-
Das heisst so?
class testKlasse { public: inline void print(){ std::cout << "Test"; } };
Hätte ich nicht dann ohne inline die Funktion implizit inline definiert?
Wo ist denn da der Unterschied?
-
Ah, jetzt hab ich's...
[code]
class testKlasse
{
public:
void print();
};inline
void testKlasse::print()
{
std::cout <<"Test";
}
[cpp]Dient wohl nur dazu die Deklarationen überichtlich zu halten...
-
also wenn du im header die funktion inline machst und dann aber die implementation in die cpp datei, dann kann der compiler das gar nicht inline machen. es ist also sinnlos. die implementation muss auch im header sein.