여기 cpp에 새로 온 사람이 있습니다.가상 함수에 대한 정적 멤버 반환, 추상 클래스에 대한 vtable 누락
가상 기능을 구현할 때 정적 속성을 반환하려고했습니다. 이 문제는 함수가 구현되지 않았다는 링커 오류를 발생시킵니다. 나는이 문제로 인해 길을 잃었다.
나는 다음과 같은 옷을 벗었 코드 오류를 재현 할 수 있었다 :#include <iostream>
#include <map>
class Abstract1 {
public:
virtual char* getFoo();
};
class Base: public Abstract1 {
public:
char* getFoo() {
return Base::mapper[1];
}
static std::map<int,char*> mapper;
};
std::map<int, char*> Base::mapper;
int main(int argc, const char * argv[]) {
Base::mapper[0] = "Hello!\n";
Base::mapper[1] = "Goodbye!\n";
Base* hello = new Base();
// insert code here...
std::cout << hello->getFoo() << "\n";
return 0;
}
는 다음 링커 오류 항복 :
Undefined symbols for architecture x86_64:
"typeinfo for Abstract1", referenced from:
typeinfo for Base in main.o
"vtable for Abstract1", referenced from:
Abstract1::Abstract1() in main.o
'Abstract1' 포인터에서 삭제하려는 경우 가상 소멸자를 추가해야합니다. –