2016-01-13 27 views
0

我有一个自定义类,并且正在尝试为=创建运算符重载函数。不幸的是,我得到的错误没有指向特定的行或错误,我只是得到以下错误。1尝试超载时出现无法解析的外部错误=运算符

解析外部符号 “公共:整数__thiscall序列::大小(无效)常量” 在函数引用“公共(大小@ @@序列QBEHXZ?):无效__thiscall序列::运算=(类序列常量& )”(?? 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++; 
    } 
} 

大小功能,只需返回序列的大小。在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; 
+9

该错误与'operator ='本身无关。编译器(链接器)告诉你,你忘了定义'size()'函数。 'size()'的定义在哪里? – AnT

回答

0

在编译的链接步骤中出现“未解决的外部”错误。有关更多详细信息,请参阅this question。请注意,在编译步骤中,编译器从Sequence2.cpp制作了Sequence2.obj(并将其包括在内)。

是的,链接器错误比实际编译源代码时发生的那些编译器错误有点棘手。

我想这地方在你的代码,你有类似

class sequence 
{ 
    // ... some declarations 

    int size(); 

    // ... more declarations 
} 

,但没有相应的

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

或者出现的size()的实现,但它不会被编译。在这种情况下检查你的项目设置/ makefile。或者它已经被编译,但结果'.obj'文件没有被链接器使用。

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

相关问题