错误:
g++ -Wall -Wextra -ansi -pedantic Testr.cc classE.cc classC.cc
classE.cc:46:14: error: expected unqualified-id before '&'token
classC.cc:46:14: error: expected unqualified-id before '&'token
编译器所指的行:
classE classE::&operator%(classB &rhs){
编译器正在讨论"&"在'classE::&运算符"%"表达式;我很想尽快删除"与号",但作业(是任意的家庭作业指南)需要它。我甚至不确定"与"应该做什么。类似的运算符重载方法使用相同的大纲,没有问题,我在谷歌和课本上都是两手空空的。
在参数中指定派生类(classB.h是纯虚拟的)也不能清除这些错误。
因为其他类似定义的运算符工作时没有问题,所以我认为问题在于实现。基本思想是取两个classB派生的对象(classC或classE),并将每个对象包含的字符串变量与另一个对象交错,返回包含交织字符串的lhs类型对象。classE实现实际上与classC实现完全相同:
classC classC::&operator%(classB &rhs){ //Interleave two classB-derived objects, return object of lhs-type
string temp = rhs.str(), temp2 = restore(), result = "";
int a = temp.size(), b = temp2.size(), max;
if (temp2.size() > temp.size()){
max = temp2;
}
else{
max = temp;
}
for (int i = 0; i < max; i++){
if (i < a){
result += temp2[i];
}
if (i < b){
result += temp[i];
}
}
return classC(result);
}
对不起,我是新来的;我不知道如何将行号添加到代码块=-\
感谢您阅读并考虑我的问题。=-)
编辑:我担心这会是一个令人尴尬的愚蠢错误;将行更改为类E&classE::运算符%(classB&rhs){为大量新错误打开了闸门。嘿,就在我以为我掌握了C++的窍门的时候。谢谢大家。我希望我今后所有的问题都一样简单。
classE classE::&operator%(classB &rhs)
在语法上无效。
如果您正在重载%
运算符,您只需要:
classE classE::operator%(classB &rhs)
如果您打算返回推荐信,您需要:
classE& classE::operator%(classB &rhs)
^ ^ ^ ^ ^ ^
| | | | | |
| | | | | |
return type | | keyword| function arguments
| | |
class name | operator being overloaded
|
scope resolution operator
您在编写实现时似乎犯了一个错误,因为签名classE classE::&operator%(classB &rhs);
不是有效的C++代码。声明类似于classE
:中的内容
classE &operator%(classB & rhs);
这将声明operator %
的返回类型为classE &
。你可能会发现把它写成更清楚
classE& operator%(classB & rhs);
因此,实现实际上应该看起来像
classE & classE::operator%(classB &rhs){