2012-04-01 5 views
0

私はこのCRacクラスを持っていて、メンバーにいくつか問題を与えています。 CCPファイルで C++:クラスXにはYという名前のメンバーがありません

//Definition TAD CRac.hpp 

#ifndef CRAC_H 
#define CRAC_H 

namespace bblRac{ 

struct Racional{ 
    int num, denom; 
}; 

class CRac{ 
public: 
    CRac(); 
    void read(); 
    void asignarVal (const CRac& otroRac); 
    void write(); 
    void add(const CRac& otroRac)const; 
private: 
    Racional rac; 
    void simplif(); 

}; //End of class CRac 
} //End of namespace bblrac 

#endif 

私は

#include "CRac.hpp" 
using namespace bblRac; 

void CRac::add(const CRac& otroRac)const{ 
    CRac res; 
    res.num= rac.num + otroRac.num; //line 98 
    res.denom= rac.denom + otroRac.denom; 
} 

を持っていると私はそれを実行すると、出力が

CRac.cpp:98: error: ‘class bblRac::CRac’ has no member named ‘num’ 
CRac.cpp:98: error: ‘const class bblRac::CRac’ has no member named ‘num’ 
CRac.cpp:99: error: ‘class bblRac::CRac’ has no member named ‘denom’ 
CRac.cpp:99: error: ‘const class bblRac::CRac’ has no member named ‘denom’ 

である私は、このポインタでそれを修正しようとしていますが、それは継続します同じミスをしています。 ありがとう!

+1

RacionalにはCRacではなく、メンバーnumがあります。おそらく 'res.num'の代わりに' res.rac.num'を使ったのでしょうか? (otroRac.numとrac.numで同じです)。 また、racのメンバーはプライベートなので、otroRacオブジェクトに直接アクセスすることはできません。おそらくgetRac()メソッドを追加する必要があります。 – Mesop

+0

'add()'はあまり意味がありません。これは 'CRac'オブジェクトを生成し、それを修正し、それを破棄します。 'a.add(b)'に 'a'を変更させたい場合、' add() 'は' const'であってはならず、 'rac.num'、つまり' this-> rac.num '' res.rac.num'ではなく。また、これらのメソッドの多くは演算子のオーバーロードとして意味があります: 'read()'を 'friend std :: istream&operator >>(std :: istream&、CRac&)'、 'write()'として 'friend std :: 'CRac&演算子=(const CRac&)'、 'add()'を 'CRac&operator + =(const CRac&)'として、ostream&operator <<(std :: ostream&、const CRac&) '、' asignarVal' –

+0

私がこの機能でやりたいことは、2つのオブジェクトを合計して別のオブジェクトに結果を保存することだけです。私は演算子+をオーバーロードしようとしましたが、出力は同じです:class bblRacにはメンバーはありません... – Rooxrod

答えて

3

これで修正されます。

#include "CRac.hpp" 
using namespace bblRac; 

void CRac::add(const CRac& otroRac)const{ 
    CRac res; 
    res.rac.num= rac.num + otroRac.rac.num; //line 98 
    res.rac.denom= rac.denom + otroRac.rac.denom; 
} 

あなたCRacクラスはnumdenomCRacのメンバーではない、Racionalメンバ変数が含まれています。

+2

実際には' rac'はプライベートなのでどちらも動作しません – CyberDude

+0

Opps、間違った場所 –

+3

@Cyber​​Dude 'CRac'メンバー関数の中から専用の' CRac'プライベートメンバーにアクセスできます。 – mfontanini

2
res.rac.num = whatever; 
otroRac.rac.num = whatever; 

コピーオーバーをStackOverflowに挿入する前にコードを見てください。

+1

実際には 'rac'はプライベートなのでどちらも動作しません – CyberDude

+1

どうやってプライベートなのですか?彼は 'CRac'メンバー関数の中でそれをやっています... – mfontanini

+1

@fontanini私は遅くする必要があります、笑、あなたは正しい人です –

関連する問題