С++ отсутствует ошибка 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 для больше помощи.