尝试重载 = 运算符时出现 1 个未解决的外部错误

1 unresolved externals error when trying to overload= operator

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

unresolved external symbol "public: int __thiscall sequence::size(void)const " (?size@sequence@@QBEHXZ) referenced in function "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++;
    }
}

大小函数,就是returns序列的大小。在 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;

"unresolved external" 错误发生在编译的 link 步。有关详细信息,请参阅 this question。请注意,在编译步骤中,编译器从 Sequence2.cpp(及其包含的所有内容)生成 Sequence2.obj

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

我猜你的代码中某处有类似

的东西
class sequence
{
    // ... some declarations

    int size();

    // ... more declarations
}

但是没有对应的

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

或者可能有 size() 的实现,但未编译。在这种情况下检查您的项目设置/makefile。或者它已经被编译但是结果'.obj'文件没有被linker.

使用

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