【问题标题】:1 unresolved externals error when trying to overload= operator尝试重载 = 运算符时出现 1 个未解决的外部错误
【发布时间】:2016-01-13 03:01:31
【问题描述】:

我有一个自定义类,正在尝试为 = 创建一个运算符重载函数。不幸的是,我得到的错误并不指向特定的行或错误,我只是得到以下错误。

未解析的外部符号“public: int __thiscall sequence::size(void)const” (?size@sequence@@QBEHXZ) 在函数“public: void __thiscall sequence::operator=(class sequence const &)”中引用( ??4sequence@@QAEXABV0@@Z)

它位于文件 Sequence2.obj 第 1 行。由于这不是我编辑的文件,我有点不确定函数中的错误是什么。

Sequence2.cpp

void sequence::operator=(const sequence & source)
{
    if (size() <= source.size()) {

        delete[] data;

        data = new value_type[source.size()];
        current_index = -1;
        used = 0;
    }
    else {

        delete[] data;

        data = new value_type[source.size() * 2];
        current_index = -1;
        used = 0;
    }

    for (int i = 0; i < source.size(); i++)
    {
        data[i] = source.data[i];
        used++;
        current_index++;
    }
}

size函数,只是返回序列的大小。在 Main.cpp 我只有以下内容。

sequence test; // A sequence that we’ll perform tests on
sequence test2;

test.insert(33);
test.insert(35);
test.insert(36);

test2 = test;

【问题讨论】:

  • 该错误与operator = 本身无关。编译器(链接器)告诉您忘记定义size() 函数。 size() 的定义在哪里?

标签: c++


【解决方案1】:

“未解决的外部”错误发生在编译的链接步骤中。有关更多详细信息,请参阅this question。请注意,在编译步骤中,编译器从Sequence2.cpp(以及它包含的所有内容)生成了Sequence2.obj

是的,链接器错误比实际编译源代码期间发生的编译器错误要棘手一些。

我猜你的代码中的某个地方有类似的东西

class sequence
{
    // ... some declarations

    int size();

    // ... more declarations
}

但是没有对应的

int sequence::size()
{
    // implementation of size()
}

或者也许有一个size() 的实现,但它没有被编译。在这种情况下检查您的项目设置/生成文件。或者它已经被编译但是链接器没有使用结果'.obj'文件。

错误消息至少声称链接器不知道包含size() 实现的已翻译(即编译)副本的.obj 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-18
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多