2012-04-01 7 views
0

Ich habe diese CRac-Klasse und es gibt mir einige Probleme mit seinen Mitgliedern.C++: Klasse X hat kein Mitglied mit dem Namen 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 

In einer ccp-Datei habe ich

#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; 
} 

Und wenn ich es laufen, ist der Ausgang

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’ 

ich es mit dem Zeiger dieses zu beheben versucht, aber es geht weiter Geben Sie den gleichen Fehler .. Vielen Dank!

+1

Racional haben eine Mitgliedsnummer, nicht CRac. Vielleicht hast du "res.rac.num" statt "res.num" gemeint? (Gleiches gilt für otroRac.num und rac.num). Auch das Mitglied rac ist privat, Sie können nicht direkt auf das Objekt otroRac zugreifen, vielleicht sollten Sie eine Methode getRac() hinzufügen. – Mesop

+0

'add()' macht nicht viel Sinn. Er erstellt ein CRac-Objekt, ändert es und verwirft es dann. Wenn Sie möchten, dass 'a.add (b)' 'a' ändert, dann sollte' add() 'nicht' const' sein, und Sie sollten an 'rac.num' arbeiten, dh' this-> rac.num ', nicht' res.rac.num'. Außerdem wären viele dieser Methoden sinnvoller als Operator-Überladungen: 'read()' als 'Freund std :: istream & operator >> (std :: istream &, CRac &)', 'write()' als 'friend std :: ostream & operator << (std :: ostream &, const CRac &) ',' asignarVal' als 'CRac & operator = (const CRac &)', und 'add()' als 'CRac & operator + = (const CRac &)'. –

+0

Alles, was ich mit dieser Funktion tun möchte, ist, zwei Objekte zu addieren und das Ergebnis in einem anderen zu speichern. Ich habe versucht, den Operator + zu überlasten, aber die Ausgabe ist das gleiche: Klasse bblRac hat kein Mitglied mit dem Namen ... – Rooxrod

Antwort

3

Dies wird es beheben.

#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; 
} 

Ihre CRac Klasse enthält eine Racional Membervariable, num und denom sind nicht Mitglieder von CRac.

+2

eigentlich 'rac' ist privat, so dass es auch nicht funktioniert – CyberDude

+0

Opps, falscher Ort –

+3

@CyberDude Sie können auf private 'CRac' private Mitglieder von innerhalb' CRac' Mitgliedsfunktionen zugreifen. – mfontanini

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

Bitte schauen Sie sich Ihren Code an, bevor Sie Copy/Paste in StackOverflow drücken.

+1

eigentlich 'rac' ist privat, so dass es nicht funktioniert – CyberDude

+1

Wie meinst du es ist privat? Er macht das in einer "CRac" -Mitgliedsfunktion ... – mfontanini

+1

@fontanini Ich muss langsamer werden, lol, du bist der richtige –

Verwandte Themen