LNK2019 mit Template-Klasse
-
Beim Versuch diesen Code zu linken, bekomm ich diese Fehlermeldung... Beim besten Willen finde ich da aber keinen Fehler drin...:
"Test1.obj : error LNK2019: unresolved external symbol "public: __thiscall BaseTest<bool>::BaseTest<bool>(void)" (??0?BaseTest@\_N@@QAE@XZ) referenced in function "public: __thiscall Test1::Test1(void)" (??0Test1@@QAE@XZ) Test1.obj : error LNK2019: unresolved external symbol "public: virtual \_\_thiscall BaseTest
::~BaseTest (void)" (??1?BaseTest@_N@@UAE@XZ) referenced in function "public: virtual __thiscall Test1::~Test1(void)" (??1Test1@@UAE@XZ)" Hier die 4 Quellcodes:
BaseTest.h
#pragma once #include "daoc-docdlg.h" template<class Temp> class BaseTest : protected CDAoCDoCDlg { public: void Adjust(Temp); // Aufurf bei Settingänderung void Fix(void); // ruft Save auf, wenn HasChanged TRUE und aktualisiert Settings // Aufruf bei Übernehmen void Check(void); // ruft Test auf wenn bTest=true, aktualisiert Settings und Oberfläche // Aufruf bei Überprüfen protected: bool HasChanged(void); // vergleicht setting_old und setting_cur Temp tOldSetting; // aktuell gespeicherte Einstellungen Temp tCurSetting; // aktuell ausgewählte Einstellung BaseTest(void); ~BaseTest(void); private: virtual void Save(void) = 0;// Speichert aktuelle Einstellungen virtual void Set(Temp) = 0; // Aktualisiert Oberfläche virtual Temp Test(void) = 0;// Testet, ob Fehler besteht, aktualisiert bTest und gibt Wert zurück bool bTest; // wird auf False gesetzt, wenn Test nicht mehr erforderlich };
BaseText.cpp
#include "StdAfx.h" #include ".\basetest.h" template <class Temp> BaseTest<Temp>::BaseTest(void){ bTest = TRUE; } template <class Temp> BaseTest<Temp>::~BaseTest(void){ } template <class Temp> void BaseTest<Temp>::Adjust(Temp){ tCurSetting = Temp; } template <class Temp> void BaseTest<Temp>::Fix(void){ if(HasChanged()){ Save(); tOldSetting = tCurSetting; } } template <class Temp> bool BaseTest<Temp>::HasChanged(void){ return(tOldSetting == tCurSetting); } template <class Temp> void BaseTest<Temp>::Check(void){ // testen, falls Test erforderlich ist (bTest = True) if(bTest) tOldSetting = Test(); // Anzeige aktualisieren, falls Einstellungen verändert wurden if(HasChanged) Set(tOldSetting); tCurSetting = tOldSetting; }
Test1.h
#pragma once #include "basetest.h" class Test1 : private BaseTest<bool>{ public: Test1(void); ~Test1(void); private: void Save(void); void Set(bool); bool Test(void); // 0 = Automatischer Neustart ist aus, 1 = an };
Test1.cpp
#include "StdAfx.h" #include ".\test1.h" Test1::Test1(void){ } Test1::~Test1(void){ } bool Test1::Test(void){ // auslesen, ob automatischer Neustart momentan aktiviert ist HKEY hKey; // Handle für Key DWORD dwBuf, dwSize; // Buffer für Wert dwSize = sizeof(DWORD); // große des Buffers RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\CrashControl", 0, KEY_QUERY_VALUE, &hKey); RegQueryValueEx(hKey, "AutoReboot", NULL, NULL, (PBYTE)&dwBuf, &dwSize); RegCloseKey(hKey); return(!!dwBuf); } void Test1::Save(void){ // Registry ändern HKEY hKey; // Handle für Key RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\CrashControl", 0, KEY_WRITE, &hKey); RegSetValueEx(hKey, "AutoReboot", 0, REG_DWORD, (LPBYTE)&tCurSetting, sizeof(DWORD)); RegCloseKey(hKey); } void Test1::Set(bool bSetting){ // Automatische Neustart-Gruppe aktivieren m_cnGbReset.EnableWindow(TRUE); // Gruppe aktivieren m_cnRbReset.EnableWindow(TRUE); // Aktivierungsknopf aktivieren GetDlgItem(IDC_RB_DISNEUSTART)->EnableWindow(TRUE); // Deaktivierungsknopf aktivieren // richtigen RB auswählen m_iRbReset = !bSetting; }
-
BaseTest.cpp bis auf die includes an die BaseTest.h dranhängen, BaseTest.cpp entfernen, neu kompilieren.
-
-
Danke für die schnelle Hilfe und sorry, dass ich die FAQ nicht gefunden habe... habe wohl nach den falschen Schlüsselwörtern gesucht...
-
Luke1410 schrieb:
Danke für die schnelle Hilfe und sorry, dass ich die FAQ nicht gefunden habe... habe wohl nach den falschen Schlüsselwörtern gesucht...
das ist nix wofür man sich entschuldigen muss