【问题标题】:How to resolve this linking error如何解决此链接错误
【发布时间】:2011-10-17 14:45:26
【问题描述】:

我有一个 A 类,它是一个抽象基类。(C++)。现在,我有两个继承自 A 的类 B 和 C;

我在 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.

请建议如何解决这个问题。

谢谢, 卡尔提克。

【问题讨论】:

  • 发布完整代码。您没有向我们展示的代码中一定存在错误。
  • 我不能:(。我不允许。
  • 尝试构建一个最小的示例来重现您的问题。否则这里没有真正的问题。

标签: c++ dynamic-linking


【解决方案1】:

首先,实际上没有必要显式地“调用”基类构造函数。将自动为您调用基类的默认构造函数。

其次,正如@DeadMG 已经指出的那样,您收到的错误表明您明确声明了A::A() 构造函数,但忘记定义它。

【讨论】:

    【解决方案2】:

    这表明您在声明 A 时从未定义它的默认构造函数。

    【讨论】:

    • @user815961:如果它“到位”,您将不会收到这些链接器错误。不,构造函数定义不是“就地”(无论您所说的“就地”是什么意思)
    • 大家好,实际上,抽象基类(A)有一个构造函数。并将其从该抽象基类及其所有子类(B&C)中删除正在解决问题。是不是抽象基类不能有构造函数? stackoverflow.com/questions/1057221/…
    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 2021-04-24
    • 2010-11-01
    • 2010-10-31
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多