2012-03-07 73 views
0

我正在一个VS2010C++控制台应用程序,并创建了一个管理器类,其中包含静态和动态对象相同类型(事)其中之一是一个向量。无法解析的外部C++,默认的构造函数

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

然后,我就用我需要为程序的所有功能做了,我也得到了一大堆LNK2019的“一些事情无法解析的外部符号治法在functionB引用。

第一为什么我需要一个默认的构造函数如果我需要它在运行时完成的托管类?

秒我该如何摆脱这些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 *)" ([email protected]@[email protected]@Z) referenced in function _wmain 

我认为这可能是需要把括号,但随后VS大叫大约期待一个成员。还有其他的功能,但是如果我能够弄清楚这里发生了什么,那么这些应该是可以修复的。

+0

注意我知道它不是通用的C++约定来识别所有成员的访问修饰符,但我已经使用了4种不同的c/C++编译器,并且没有人曾经抱怨过,或者从中引发任何问题 – gardian06 2012-03-07 03:15:41

+1

链接问题是你承诺在头文件中定义运算符,说它是“inline”,但是你只在实现文件中定义它。只需删除内联。 – 2012-03-07 08:35:28

回答

1

这将有助于查看代码。从它的声音中,你创建一个std::vector<T>与你输入一些非零大小的类型:std::vector<T>需要初始化对象,你显然没有给它一个它可以复制的对象。您可能要创建一个空的std::vector<T>和使用push_back()你很容易构建对象(或emplace()他们,如果你有一个C++ 2011系统)

对于连接错误:你显然没有定义的某些功能,您正在使用。这些确切无法用您给出的模糊描述来说明。您需要提供更多详细信息,例如确切链接错误连同假定的实现。

+0

为问题添加了示例 – gardian06 2012-03-07 03:13:57