C++ c++;:类X没有名为Y的成员

C++ c++;:类X没有名为Y的成员,c++,class,C++,Class,我有一个CRac类,它给了我一些与它的成员有关的问题 //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); voi

我有一个CRac类,它给了我一些与它的成员有关的问题

//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
我有一份ccp文件

#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’
我试着用指针修复它,但它仍然会出现同样的错误。。 谢谢大家!

res.rac.num = whatever;
otroRac.rac.num = whatever;
在点击复制/粘贴到StackOverflow之前,请仔细查看您的代码

在点击“复制/粘贴到StackOverflow”之前,请仔细查看您的代码。

这将修复它

#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
类包含一个
Racional
成员变量,
num
denom
不是
CRac
的成员,这将修复它

#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
类包含一个
Racional
成员变量,
num
denom
不是
CRac

@CyberDude的成员。你可以从
CRac
成员函数内部访问private
CRac
private成员。这样它也不起作用,因为
res
rac
是对象,我想访问num和denom(分母)所以它继续给我同样的错误:类bblRac没有名为num的成员,并且denomI怀疑您是否得到了这个错误,因为
bblRac
是一个名称空间。我刚刚复制了您的代码,将其粘贴到一个文件中,修改了我在回答中所述的内容,并编译了它。你确定在我的回答中包含了我提供的全部方法吗?复制并粘贴它。@CyberDude您可以从
CRac
成员函数内部访问私有
CRac
私有成员。这种方式也不起作用,因为
res
rac
是对象,我想访问num和denom(分母)所以它继续给我同样的错误:类bblRac没有名为num的成员,并且denomI怀疑您是否得到了这个错误,因为
bblRac
是一个名称空间。我刚刚复制了您的代码,将其粘贴到一个文件中,修改了我在回答中所述的内容,并编译了它。你确定在我的回答中包含了我提供的全部方法吗?复制并粘贴它。我有一个成员编号,而不是CRac。也许你的意思是
res.rac.num
而不是
res.num
?(otroRac.num和rac.num相同)。另外,成员rac是私有的,您将无法直接为otroRac对象访问它,也许您应该添加一个方法getRac()。
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::ostream&operator,我想用这个函数将两个对象相加,并将结果保存在另一个对象中。我试图重载运算符+,但输出是相同的:类bblRac没有名为…的成员,而不是CRac。也许你的意思是
res.rac.num
而不是
res.num
?(otroRac.num和rac.num相同)。另外,成员rac是私有的,您将无法直接为otroRac对象访问它,也许您应该添加一个方法getRac()。
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::ostream&operator,我想用这个函数将两个对象相加,并将结果保存在另一个对象中。我试图重载运算符+,但输出是相同的:类bblRac没有名为。。。