【问题标题】:unresolved externals c++, default constructor未解决的外部 C++,默认构造函数
【发布时间】:2012-03-07 01:43:15
【问题描述】:

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

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

然后我完成了程序所需的所有功能,我得到了一大堆 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);
...
};

事物.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 大喊着期待一个成员。还有其他功能,但也许如果我能弄清楚这里发生了什么,那么这些应该是可以修复的。

【问题讨论】:

  • 注意我知道在所有成员上识别访问修饰符不是常见的 c++ 约定,但我使用过 4 种不同的 c/c++ 编译器,没有一个曾经抱怨过,或者导致任何问题它
  • 链接问题是你承诺在标题中定义运算符,说它是inline,但你只在实现文件中定义了它。只需删除内联。

标签: c++ visual-studio-2010 unresolved-external


【解决方案1】:

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

关于链接错误:您显然没有定义您正在使用的某些功能。您给出的模糊描述无法说明这些到底是什么。您需要提供更多详细信息,例如exact 链接错误以及假定的实现。

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 2021-03-19
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2013-11-06
    相关资源
    最近更新 更多