С++ отсутствует ошибка vtable
Я получаю действительно странную ошибку, связанную с отсутствием vtable для данного конструктора классов и деструктора. Пожалуйста, помогите мне решить эту проблему.
Undefined символы для архитектуры i386:
"vtable for A", referenced from:
A::A() in A.o
A::~MissionController() in A.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
фрагмент кода;
.h файл:
class A: public B
public:
A();
~A();
};
.cpp файл..
A::A()
{
}
A::~A()
{
}
Ответы
Ответ 1
Ах! Обдумывая это, я думаю, что получаю то, что происходит. Я уверен, что CCNode
- это код, который принадлежит кому-то другому.
Любые виртуальные функции, которые вы наследуете, также являются виртуальными в производном классе... и общепринятой практикой является создание виртуального деструктора... вы можете не понимать, что деструктор является виртуальным.
Кроме того, если вы используете какой-либо другой заголовочный файл, но забыли связать его с объектным файлом, это может вызвать эту ошибку, поскольку компоновщик будет отсутствовать деструктор CCNode
.
Ответ 2
Нашел, пытаясь с образцом, вот пример.
class Shape{
public:
virtual int areas();
virtual void display();
virtual ~Shape(){};
};
Компилятор жаловался
Undefined symbols for architecture x86_64:
"typeinfo for Shape", referenced from:
typeinfo for trian in main_file.o
"vtable for Shape", referenced from:
Shape::Shape() in main_file.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [cpp_tries] Error 1enter code here
Модификация пуста или любого встроенного содержимого внутри {} рядом с виртуальной функцией
class Shape{
public:
virtual int areas(){};
virtual void display(){};
virtual ~Shape(){};
};
В принципе, он не находит определения функции для неинлайн-виртуальных функций.
Ответ 3
Попробуйте добавить виртуальный деструктор в ваш класс. CCNode propably содержит некоторые виртуальные методы, и ваш компилятор не справился с ним.
class MissionController: public CCNode
{
public:
MissionController();
virtual ~MissionController();
};
Это какая-то общедоступная структура, где мы можем увидеть определение класса CCNode? См. vtable для.. ссылаясь на компиляцию xcode или, возможно, http://www.parashift.com/c++-faq-lite/link-errs-missing-vtable.html для больше помощи.