在类ctor中的默认nullptr指针给出了无法解析的外部符号c++
Default nullptr pointer in class ctor give unresolved external symbol c++
我有以下类(非实名):
class CObject1 : public IObject1
{
public:
CObject1(IObject2 *pIObject2 = nullptr);
}
其中"I"版本用于接口类。现在,当我创建CObject1的实例为:
CObject1 object1;
我得到一个未解析的外部符号,抱怨没有找到CObject1(void)。如果我尝试显式声明另一个actor为:
CObject1()
我显然得到了"指定了多个默认构造函数"的警告,正如人们所期望的那样。
为什么程序找不到我的默认变量??
提前感谢。
编辑:其他说明:
- 接口本身没有明确定义的actor。
- 所有这些都在同一个命名空间下。即接口的定义、实现和实例化。
- 我在MS单元测试中看到了这一点。我没有一个"正常"的项目,我可以测试这个
你的类没有生成一个默认的(CObject1()
)构造函数。它生成的是一个需要一个实参的构造函数,任何读取定义的代码都知道,如果遇到默认的实参,就填充该实参——这是在调用处完成的。
class C {
public:
C(int* p = nullptr);
};
C fn() {
C c{};
return c;
};
生成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
然而,单元测试框架可能没有看到该定义,并处理您的对象具有默认actor的要求。在这种情况下,您应该考虑这样写:
CObject1() : CObject1(nullptr) {}
CObject1(IObject2 *pIObject2);
相关文章:
- 在函数内部的声明中初始化数组,并在外部使用它
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- C++:来自外部文件的Trivia
- 从函数角度看ID到文件路径的内部与外部映射
- C++:将外部库链接到dll库
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 节俭并发:未解决的外部问题
- 如何在c++中从git建立外部库
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 具有外部"c"和程序集的未定义函数
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 在C++中使用 gRPC 时未解析的外部符号
- 在类函数中初始化外部作用域变量
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 调用外部函数,无法指定类型 C++/MVS
- 同时具有"外部"和"内联"说明符的变量
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta