尝试重载=运算符时1未解析的外部错误

时间:2016-01-13 03:01:31

标签: c++

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

  

未解析的外部符号" public:int __thiscall sequence :: size(void)const"函数" public中引用的(?size @ sequence @@ QBEHXZ):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;

1 个答案:

答案 0 :(得分:0)

&#34;未解决的外部&#34;在编译的链接步骤期间发生错误。有关详细信息,请参阅this question。请注意,在编译步骤中,编译器从Sequence2.obj创建Sequence2.cpp(并将其包括在内)。

是的,链接器错误比在实际编译源代码期间发生的编译器错误有点棘手。

我想你的代码中的某处就像

class sequence
{
    // ... some declarations

    int size();

    // ... more declarations
}

但没有相应的

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

或者可能有size()的实现,但它没有编译。在这种情况下,请检查项目设置/ makefile。或者它已被编译但结果&#39; .obj&#39;链接器不使用该文件。

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