C ++ Copy Assignment Operator问题

时间:2014-03-09 08:57:22

标签: c++ c++11

下面是我的C ++代码片段,它涉及复制赋值运算符:

StudentRecord & operator=(const StudentRecord & rhs) {
if (this != &rhs ){
    StudentRecord::name = rhs.name;
    StudentRecord:: surname = rhs.surname;
        StudentRecord::studentNumber=rhs.studentNumber;
        StudentRecord::classRecord = rhs.classRecord;
        int newToken= StudentRecord::aquire_token();
        if(StudentRecord::token != -1){
            //Error here
            StudentRecord::release_token( StudentRecord::token );
        }

}


return (*this);
}

下面是.h头文件中成员函数的声明:

StudentRecord operator=(const StudentRecord  & rhs);

但是我在Linux上使用Eclipse时收到以下错误消息:

Invalid arguments 'Candidates are:void release_token(int)'

这是我应该关注的事情,因为根据我的经验,Eclipse在用作C ++开发的ide时容易出错。这是一个真正的问题,为什么发生错误以及修复错误需要什么步骤

我真的需要知道。

#ifndef  _STUDENT_H
#define  _STUDENT_H
#include <string>
namespace dnkmat001 {
class StudentRecord
{

public:
    std::string name;
    std::string surname;
    std::string studentNumber;
    std::string classRecord;
    int token;

public:
    StudentRecord(const std::string&  n , const std::string& s , const std::string& x , const std::string& c );
    StudentRecord(void);
    StudentRecord(const StudentRecord & rhs);
    StudentRecord(StudentRecord && rhs );
    StudentRecord operator=(const StudentRecord  & rhs);
    StudentRecord operator=(const StudentRecord  && rhs);
    ~StudentRecord();
    int avg(void);
    static int aquire_token();
    void release_token(int t);
};

  }
 #endif

这是release_token(int)的声明:

void release_token(int t);

1 个答案:

答案 0 :(得分:1)

您在类定义中声明赋值运算符是:

StudentRecord operator=(const StudentRecord  & rhs);

然后你写

StudentRecord & operator=(const StudentRecord & rhs) {
 //...
}

但这不是你在课堂上声明的函数的定义。它是一个免费的函数,它也可以立即清楚,如果你没有用它的类名限定每个变量,编译器会抱怨。您需要通过明确限定它来告诉编译器您正在定义先前在StudentRecord类中声明的函数。另请注意,您的函数声明为返回StudentRecord,但它应返回StudentRecord &

更改函数定义的签名,如下所示:

StudentRecord & StudentRecord::operator=(const StudentRecord & rhs) {
 //...
}

为了便于阅读,还要删除函数体内的所有StudentRecord::限定符。