我有一个头文件,我在其中声明一个具有结构的类。此外,我声明一个重载运算符(!=,比较结构)作为此类的成员。我在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
我应该如何访问结构成员?
答案 0 :(得分:3)
if((model1.id==model.id)&&(model1.mode==model.mode))
- model
是您班级的名称,而不是您的对象。您的对象可以通过this
访问,或者您可以在课程中完全省略它。
使用if((model1.id==prev.id)&&(model1.mode==prev.mode))
与prev
或if((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;
// ...