在类中的结构中使用运算符重载

时间:2012-10-29 15:22:15

标签: c++

我有一个头文件,我在其中声明一个具有结构的类。此外,我声明一个重载运算符(!=,比较结构)作为此类的成员。我在cpp文件中给出了这个运算符的定义。但我无法访问结构的成员

car.h

class car
{ 
int carsor;

struct model
{
    int id;

    int mode;

}prev,curr;

bool operator !=(const model& model1);

};

car.cpp

#include "car.h"

bool car::operator !=(const model& model1)
{
if((model1.id==model.id)&&(model1.mode==model.mode))
{
    return false;
}

else
{

    return false;
}
}

我得到的错误就是这个

Error   2   error C2275: 'car::model' : illegal use of this type as an expression   

我应该如何访问结构成员?

2 个答案:

答案 0 :(得分:3)

if((model1.id==model.id)&&(model1.mode==model.mode)) - model是您班级的名称,而不是您的对象。您的对象可以通过this访问,或者您可以在课程中完全省略它。 使用if((model1.id==prev.id)&&(model1.mode==prev.mode))previf((model1.id==next.id)&&(model1.mode==next.mode))进行比较,与下一个进行比较。

答案 1 :(得分:0)

此:

bool car::operator !=(const model& model1)
{

是一种将汽车与模型进行比较的方法。但是,这个:

bool car::model::operator != (car::model const &other) const
{
  return !(*this == other);
}

是一种比较两个模型的方法(我在这里将其作为car::model的方法编写,但如果您愿意,它可以是一个自由函数。

我也用operator==来编写它,因为逻辑几乎总是更容易理解:

bool car::model::operator ==(car::model const &other) const
{
    return (this->id == other.id) && (this->mode == other.mode);
}

这些方法将声明为:

class car
{ 
    struct model
    {
        int id;
        int mode;
        bool operator==(model const&) const;
        bool operator!=(model const&) const;
        // ...