I am getting a really weird error related to missing vtable for a given class constructor and destructor. Please help me to resolve this.
Undefined symbols for architecture 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)
Code snippet;
class A: public B
public:
A();
~A();
};
A::A()
{
}
A::~A()
{
}
Found it,,trying with the sample, here is an exmaple.
class Shape{
public:
virtual int areas();
virtual void display();
virtual ~Shape(){};
};
The compiler complained
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
The modification is empty or any inline content inside {} next to the virtual function
class Shape{
public:
virtual int areas(){};
virtual void display(){};
virtual ~Shape(){};
};
Basically, its not finding the function definition for the non-inline virtual functions.
Ah! Mulling over this I think I get what is happening. I'm betting that CCNode
is code which belongs to somebody else.
Any virtual functions you inherit are also virtual in the derived class... and it is common practice to make the destructor virtual... you might not realise the destructor is virtual.
Also if you are using somebody else's header file, but forgot to link to their object file, it might cause this error, as the linker would be missing the destructor of CCNode
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With