gpt4 book ai didi

c++ - 未解析的外部 C++,默认构造函数

转载 作者:行者123 更新时间:2023-11-28 08:08:53 25 4
gpt4 key购买 nike

我正在开发一个 VS2010C++ 控制台应用程序,并创建了一个管理器类,该类包含相同类型 (Thing) 的静态和动态对象,其中一个是 vector 。

我最初在管理器类的构造函数上得到一个错误,指出它所组成的类没有默认构造函数(但它不应该有默认构造函数,因为对象需要在运行时实例化,并且运行时输入的信息)我最终为持有的类创建了一个默认构造函数(什么都不做),然后我就可以继续了。

然后我完成了该程序所需的所有功能,我得到了一大堆 LNK2019“关于函数 B 中引用的未解析外部符号 MethodA 的内容。

首先,如果我需要在运行时完成,为什么我需要托管类的默认构造函数?

其次,我如何摆脱这些 LNK2019? (所有这些方法都在 header 中标记为内联,并且它只是对管理器类的引用或来自管理器类,并且没有命名冲突。)作为一个小注释,它是否与必须混合访问修饰符有关。 (对于静态成员)和 ->(对于动态成员)?

编辑:能够通过将默认构造函数的需求限制为单个方法并将其他静态变量修改为动态变量来摆脱默认构造函数

对于链接器错误:在 Thing.h 中

class Thing{
public : int ** Array;
public : int size;
public : Point pi;
public : SinglyLinkedList * moves;
...
public :inline bool operator==(const Thing * _thing);
...
};

事物.cpp

bool Thing::operator==(const Thing * _Thing){
for(int ii = 0; ii < m; ii++){
for(int jj = 0; jj < m; jj++){
if(Array[ii][jj] != _Thing->Array[ii][jj]){
return false;
}
}
}
return true;
}

事物管理器.h

class ThingMgr {
public : Thing * control;
public : Thing * Current;
public : Thing * previous;
public : int size;

主要.cpp

int _tmain{
...
ThingMgr * TestTings= new ThingMgr(num);
...
if(testThings->control->operator==(testThings->Current)){ // pretty sure its here as it is not called anywhere else in the function.
...
}

错误

1>Project_1.obj : error LNK2019: unresolved external symbol "public: bool __thiscall Thing::operator==(class Thing const *)" (??8Board@@QAE_NPBV0@@Z) referenced in function _wmain

本来以为可能是要加括号,结果VS大喊要成员(member)。还有其他功能,但也许如果我能弄清楚这里发生了什么,那么这些功能应该是可以修复的。

最佳答案

看到代码会有帮助。从它的声音中,你创造了一个std::vector<T>你输入的是一些非零大小:std::vector<T>需要初始化对象,而您显然没有给它一个可以复制的对象。您可能想创建一个空的 std::vector<T>并使用 push_back()你容易构造的对象(或者 emplace() 如果你有 C++2011 系统,它们)

关于链接错误:您显然没有定义您正在使用的一些功能。这些究竟是什么,用你给出的模糊描述是无法分辨的。您需要提供更多详细信息,例如确切链接错误以及假定的实现。

关于c++ - 未解析的外部 C++,默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9594660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com