Как устранить эту ошибку компоновки - PullRequest
0 голосов
/ 01 августа 2011

У меня есть класс A, который является абстрактным базовым классом. (C ++).Теперь у меня есть два класса B и C, которые наследуются от A;

У меня есть виртуальный деструктор в A;Конструктор в классе A защищен.Теперь в конструкторы B и C я включил вызов конструктора A.

B::B():A()
{
//do something
}

аналогично для C

C::C():A()
{
//do something
}

Теперь, во время компиляции я получаю ошибки компоновки.

    B.obj : error LNK2019: unresolved external symbol "protected: __
thiscall A::A(void)" (??0A) referenced in function "protected: __thiscall B::B(void)" (??0B)

    C.obj : error LNK2001: unresolved external symbol "protected:
__thiscall A::A(void)" (??0A@XZ)
      Error.

Пожалуйста, предложите, как решить эту проблему.

Спасибо, Karhtik.

Ответы [ 2 ]

0 голосов
/ 01 августа 2011

Во-первых, действительно нет необходимости явно «вызывать» конструктор базового класса. Конструктор по умолчанию базового класса будет вызываться автоматически.

Во-вторых, как уже заметил @DeadMG, ошибка, которую вы получаете, предполагает, что вы явно объявили конструктор A::A(), но забыли его определить.

0 голосов
/ 01 августа 2011

Это говорит о том, что вы никогда не определяли конструктор A по умолчанию, когда объявляли его.

...