Передача этого из конструктора в другой конструктор дает неопределенную ссылку на связывание - PullRequest
0 голосов
/ 02 октября 2011

Я пытаюсь скомпилировать код со следующей структурой под кодовыми блоками:

class a : public cppcms::application (has virtual members) {
 public:
   a() : b_inst(this) {}
   ...
   b b_inst;

}

class b {
  public:
    b(a* ptr) : a_ptr(ptr) {}
  private:
    a* a_ptr;
  ...
}

Я пытаюсь соединить это с codeblocks / g ++ и получить следующее сообщение об ошибке (на этапе компоновки):

неопределенная ссылка на `vtable для b (в функции b: ...)

Я попытался получить то же самое с ссылкой, тот же результат. Я попытался изменить a :: b_inst на указатель и создать экземпляр b с новым в конструкторе (codepart), тот же результат. Как правильно это сделать?

Кстати, если я не добавляю указатель, передающий конструкцию, код работает, поэтому я думаю, что он не решается с помощью ответа здесь

1 Ответ

2 голосов
/ 02 октября 2011

неопределенная ссылка на `vtable для b (в функции b: ...)

Это означает, что, вероятно, вы не реализовали все виртуальные методы b. gcc выдает vtable, когда определен первый из них AFAIK.

Это означает, что это не имеет ничего общего с реализацией вашего конструктора.

...