다음은 코드를 컴파일 할 때의 오류입니다. 여기에 내 코드를 공유 할 수 없다는 점이 유감입니다. 참고로, 나는 외부 libs를 사용하지 않기 때문에이 링커 오류에 대해 정말로 확신하지 못합니다. 그것들은 내가 DeviceManager
클래스에서 선언 한 가상 함수에서 오는 것 같다. 각각의 구현은 두 가지 다른 클래스에 있습니다.오류 LNK : 가상 함수로 인해 생성 된 확인되지 않은 외부 기호
누군가 나를 도와 줄 수 있습니까?
1>device_manager.obj : error LNK2028: unresolved token (0A000397) "public: virtual void __clrcall DeviceManager::loadConfig(class System::IO::StreamReader ^)" ([email protected]@@[email protected]@[email protected]@@Z) referenced in function "void __clrcall `dynamic initializer for 'const DeviceManager::`vftable'''(void)" ([email protected]@[email protected]@@[email protected][email protected]@$$FYMXXZ)
1>device_manager.obj : error LNK2019: unresolved external symbol "public: virtual void __clrcall DeviceManager::loadConfig(class System::IO::StreamReader ^)" ([email protected]@@[email protected]@[email protected]@@Z) referenced in function "void __clrcall `dynamic initializer for 'const DeviceManager::`vftable'''(void)" ([email protected]@[email protected]@@[email protected][email protected]@$$FYMXXZ)
1>device_manager.obj : error LNK2001: unresolved external symbol "public: virtual class Device * __thiscall DeviceManager::createDevice(void)" ([email protected]@@[email protected]@XZ)
1>device_manager.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall DeviceManager::initializeDevices(void)" ([email protected]@@UAEXXZ)
1>C:\Users\CH\Documents\Visual Studio 2010\Projects\Test Devices\Test Devices\Debug\Test Devices.exe : fatal error LNK1120: 4 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.50
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
업데이트 1 (가능한 솔루션) : 가상 기능 (들)의없는
DeviceManager
클래스에서 선언 때문에
문제가 될 것으로 보인다 가상 순수하고 있지 않는 정의 (들) .cpp
은 DeviceManager
클래스입니다.
DeviceManager
클래스에 비 가상 함수가없는 경우 가상 함수를 순수하게 만드는 것이 솔루션이됩니다. 이 virtual void testFunction();
과 같은 것은 순수하지 않으므로 virtual void testFunction()=0;
으로 변경하는 것이 해결책입니다. 이를 위해이 가상 함수의 정의를 DeviceManager
클래스를 상속하는 다른 클래스에 구현하면 충분합니다. 이 경우 DeviceManager
클래스는 추상 클래스가되므로 인스턴스화 할 수 없습니다.
그러나 제 경우에는 DeviceManager
클래스에는 일부 비 가상 함수가 있으며 또한 비 가상 함수를 호출하기 위해 인스턴스화해야합니다. 따라서 DeviceManager
클래스를 상속하는 다른 클래스의 선언 및 정의를 제외하고 DeviceManager
클래스의 .cpp
에 가상 함수의 정의를 구현하는 것이 해결책입니다.
예, 'DeviceManager' 클래스에는 3 개의 비 가상 함수가 있습니다. 그리고 또한 그렇습니다, 나는 그것을 청소하고 다시 만들었고, 아무것도 바뀌지 않았습니다. –
복사, 형식 재 지정 및 비교 확인을 시도 했습니까? – Stefan
예, 코드의 모든 내용과 모든 내용이 문제가없는 것 같습니다. –