我正在开发VS2010C ++控制台应用程序,并创建了一个Manager类,它包含相同类型的静态和动态对象(Thing),其中一个是向量。
我最初在管理器类的构造函数上遇到错误,指出它由它组成的类没有默认构造函数(但它不应该有一个默认构造函数,因为对象需要在运行时实例化,并且运行时输入信息)我最终为被保持的类创建了一个默认构造函数(什么都不做),然后我就能继续了。
然后我完成了程序所需的所有功能,并得到了一大堆LNK2019“关于在功能B中引用的未解析的外部符号MethodA。
首先,为什么我需要托管类的默认构造函数,如果我需要在运行时完成它?
第二,如何摆脱这些LNK2019? (所有这些方法都在标题中内联标记,并且它只引用或来自管理器类,并且没有命名冲突。)因为一个小注释可能与必须混合访问修饰符有关。 (对于静态成员),和 - > (对于动态成员)?
编辑: 能够通过限制对单个方法的需要,并将其他静态修改为动态来摆脱默认构造函数
表示链接器错误:在Thing.h中
class Thing{
public : int ** Array;
public : int size;
public : Point pi;
public : SinglyLinkedList * moves;
...
public :inline bool operator==(const Thing * _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;
}
ThingMgr.h
class ThingMgr {
public : Thing * control;
public : Thing * Current;
public : Thing * previous;
public : int size;
的main.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大吼大叫期待一个成员。还有其他功能,但也许如果我能弄清楚这里发生了什么,那么那些应该是可以修复的。
答案 0 :(得分:1)
查看代码会有所帮助。从它的声音,你创建一个std::vector<T>
与你键入一个非零大小:std::vector<T>
需要初始化对象,你显然没有给它一个它可以复制的对象。你可能想创建一个空的std::vector<T>
并使用push_back()
你容易构造的对象(如果你有一个C ++ 2011系统,你可以使用emplace()
)
关于链接错误:您显然没有定义您正在使用的某些功能。用你给出的模糊描述无法分辨出这些是什么。您需要提供更多详细信息,例如完全链接错误以及假定的实现。