Следующий код дает мне ошибку компоновщика:Ошибка компоновщика | collect2: ошибка: л.д. возвращается 1 Статус выхода
#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;
}
Запуск компилятор нормально:
g++ -g -Wfatal-errors -std=c++11 main.cpp -c -o main.o
Компоновщик:
g++ -g -Wfatal-errors -std=c++11 main.o -o run
дает это ошибка:
main.o:(.rodata._ZTI8CMyclass[_ZTI8CMyclass]+0x10): undefined reference to `typeinfo for CBase' collect2: error: ld returned 1 exit status
Функция удаления create_class
исправляет ошибку. В исходном коде create_class
будет шаблоном, вызывающим класс шаблона. Поэтому, пожалуйста, не говорите мне, чтобы удалить авто!
@ πάνταῥεῖ Неприемлемая ссылка – barej
@ πάνταῥεῖ Я предполагаю, что вы даже не поняли вопрос вообще. Это конкретный вопрос, и вы ссылаетесь на общий вопрос. Это похоже на страницу, рассказывающую о том, что такое программирование! Наличие репутации 20K не делает вас правильным. – barej
Как [этот ответ] (http://stackoverflow.com/a/12574403/1413395) из связанного дубликата не объясняет вашу проблему? [Разрабатывайте в своем вопросе пожалуйста] (http://stackoverflow.com/posts/28054426/edit), как на ваш вопрос нет ответа. Вы хотите объявить абстрактную функцию, такую как 'virtual void myfunc() = 0;' в вашем классе 'CBase'? –