0

その中に構造体を持つクラスを宣言しているヘッダーファイルがあります。また、このクラスのメンバーとしてオーバーロード演算子 (!=、構造を比較する) を宣言しています。この演算子の定義を cpp ファイルに記載しています。しかし、構造体のメンバーにアクセスできません

car.h

class car
{ 
int carsor;

struct model
{
    int id;

    int mode;

}prev,curr;

bool operator !=(const model& model1);

};

車.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   

構造体のメンバーにアクセスするにはどうすればよいですか?

4

2 に答える 2

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))ます。

于 2012-10-29T15:26:13.317 に答える
0

これ:

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

車と模型を比較す​​る方法です。ただし、これは次のとおりです。

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

は、2 つのモデルを比較するメソッドです (ここでは のメソッドとして記述しましたが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;
        // ...
于 2012-10-29T15:44:25.993 に答える