class ctor 中的默认 nullptr 指针给出未解析的外部符号 c++

Default nullptr pointer in class ctor give unresolved external symbol c++

我有以下class(非真名):

class CObject1 : public IObject1
{
public:
  CObject1(IObject2 *pIObject2 = nullptr);
}

其中 "I" 版本用于接口 classes。现在,当我将 CObject1 的实例创建为:

CObject1 object1;

我得到一个未解析的外部符号,抱怨找不到 CObject1(void)。如果我尝试将另一个 ctor 显式声明为:

CObject1()

然后我显然收到了 "multiple default constructors specified" 警告,正如人们所期望的那样。

为什么程序找不到我的默认构造函数?

提前致谢。

编辑: 补充说明:

您的 class 不会 生成默认 (CObject1()) 构造函数。它生成的是一个需要一个参数的构造函数,任何读取定义的代码都会知道在遇到默认构造函数时填充该参数——这是在调用站点完成的。

class C {
public:
  C(int* p = nullptr);
};

C fn() {
  C c{};
  return c;
};

Generates

fn():                                 # @fn()
        pushq   %rax
        leaq    (%rsp), %rdi
        xorl    %esi, %esi   ; <<- injects the nullptr
        callq   C::C(int*)   ; <<- note which ctor is called
        popq    %rax
        retq

但是:单元测试框架可能看不到该定义并且无法满足您的对象具有默认构造函数的要求。在这种情况下,你应该考虑写:

CObject1() : CObject1(nullptr) {}
CObject1(IObject2 *pIObject2);