2012-05-14 2 views
1

다음은 코드를 컴파일 할 때의 오류입니다. 여기에 내 코드를 공유 할 수 없다는 점이 유감입니다. 참고로, 나는 외부 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 클래스에서 선언 때문에

문제가 될 것으로 보인다 가상 순수하고 있지 않는 정의 (들) .cppDeviceManager 클래스입니다.

DeviceManager 클래스에 비 가상 함수가없는 경우 가상 함수를 순수하게 만드는 것이 솔루션이됩니다. 이 virtual void testFunction();과 같은 것은 순수하지 않으므로 virtual void testFunction()=0;으로 변경하는 것이 해결책입니다. 이를 위해이 가상 함수의 정의를 DeviceManager 클래스를 상속하는 다른 클래스에 구현하면 충분합니다. 이 경우 DeviceManager 클래스는 추상 클래스가되므로 인스턴스화 할 수 없습니다.

그러나 제 경우에는 DeviceManager 클래스에는 일부 비 가상 함수가 있으며 또한 비 가상 함수를 호출하기 위해 인스턴스화해야합니다. 따라서 DeviceManager 클래스를 상속하는 다른 클래스의 선언 및 정의를 제외하고 DeviceManager 클래스의 .cpp에 가상 함수의 정의를 구현하는 것이 해결책입니다.

답변

0

완전히 청소하고 재구성 해 보셨습니까?

클래스에 비 가상 구성원 함수가 하나 이상 있습니까?
몇 년 전에이 문제를 보았습니다.

그 외에도 나는 함수 프로토 타입과 전체 매개 변수 목록을 단어 패드 또는 다른 것으로 복사하고 폰트를 변경하여 (눈을 감찰 할 정도로 익숙해 보이는 것을 멈추기 위해) 모든 함수를 모든 호출과 비교하는 것이 좋습니다. 그것들이 일치하는지 확인하십시오. (문제가 발생할 가능성은 더 높지만 점검 할 가치가 있습니다.)

+0

예, 'DeviceManager' 클래스에는 3 개의 비 가상 함수가 있습니다. 그리고 또한 그렇습니다, 나는 그것을 청소하고 다시 만들었고, 아무것도 바뀌지 않았습니다. –

+0

복사, 형식 재 지정 및 비교 확인을 시도 했습니까? – Stefan

+0

예, 코드의 모든 내용과 모든 내용이 문제가없는 것 같습니다. –