The following code give me linker error:
#include <iostream>
using namespace std;
class CBase
{
public:
virtual void myfunc();
CBase()
{
// constructor
}
};
class CMyclass: public CBase
{
public:
CMyclass(): CBase()
{
// constructor
}
void myfunc()
{
}
};
auto create_class()-> CMyclass
{
return CMyclass();
}
int main()
{
// auto sys_conrollable = create_class();
CMyclass a();
return 0;
}
Running compiler is fine:
g++ -g -Wfatal-errors -std=c++11 main.cpp -c -o main.o
The linker:
g++ -g -Wfatal-errors -std=c++11 main.o -o run
gives this error:
main.o:(.rodata._ZTI8CMyclass[_ZTI8CMyclass]+0x10): undefined reference to `typeinfo for CBase' collect2: error: ld returned 1 exit status
Removing create_class
function fixes the error. In original code, create_class
will be a template calling a template class. So please do not tell me to remove auto!