【问题标题】:C++: Operator overloading error: expected unqualified-id before '&' tokenC++:运算符重载错误:“&”标记之前的预期不合格 ID
【发布时间】:2012-03-18 06:04:36
【问题描述】:

错误:

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::&operator%' 表达式中的 '&';我会尽快删除与号,但作业(是的任意家庭作业指南)需要它。我什至不确定&符号应该做什么。类似的运算符重载方法使用相同的大纲没有问题,我通过google和教科书空手而归。

在参数中指定派生类(classB.h 是纯虚拟的)也不能清除这些错误。

因为其他类似定义的运算符都可以正常工作,所以我认为问题出在实现上。基本思想是获取两个类 B 派生对象(类 C 或类 E),并将每个对象包含的字符串变量与另一个对象交错,返回包含交织字符串的 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);
}

对不起,我是新来的;我不知道如何在代码块中添加行号 =-\

感谢您阅读并考虑我的问题。 =-)

编辑:我担心这会是一个令人尴尬的愚蠢错误;将行更改为 classE& classE::operator%(classB &rhs){ 为大量新错误打开了闸门。嘿,就在我以为我掌握了 C++ 的时候。非常感谢,伙计们。我希望我以后的所有问题都一样简单。

【问题讨论】:

    标签: c++ overloading operator-keyword


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:

      您似乎在编写实现时犯了一个错误,因为签名 classE classE::&amp;operator%(classB &amp;rhs); 不是有效的 C++ 代码。 classE 中的声明是这样的:

      classE &operator%(classB & rhs);
      

      这声明operator % 的返回类型为classE &amp;。你可能会发现把它写成更清楚

      classE& operator%(classB & rhs);
      

      所以实现实际上应该是这样的

      classE & classE::operator%(classB &rhs){
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多