在c ++中我有一个抽象类A:
class A
{
public:
A(){}
virtual ~A(){}
virtual void out(std::ofstream& outFile) = 0;
virtual void in(std::ifstream& inFile) = 0;
};
我希望使用虚拟方法的B类:
class B : public A
{
public:
B();
double angle;
int index;
virtual void out(std::ofstream& outFile);
virtual void in(std::ifstream& inFile);
};
现在这里有一个问题:我想在虚拟方法中使用类似(int index)的B类变量:
virtual void out(std::ofstrea& outFile)
{
outFile<< index << angle;
}
这里我得到编译器错误,即在此范围内未声明角度和索引。这有点合乎逻辑,因为这些变量没有在A类中声明。 现在我如何在虚拟方法中访问变量角度和索引?
感谢您的帮助。
答案 0 :(得分:1)
在定义你的函数时,你想要使用这样的东西:
void B::out(std::ofstream& outFile)
{
outFile<< index << angle;
}
无论函数是否为虚函数,都可以在成员函数中访问相应类的任何成员。
自从谈论读取或写入数据的函数时:除非您确实需要使用std::ofstream
或std::ifstream
的具体细节,例如,使用open()
,否则您应该通过{{ 1}}或std::ostream
引用。这样,函数也可以与不同的流流类型一起使用,例如std::istream
和std::ostringstream
。
答案 1 :(得分:1)
如果您在课外实施该方法,则不要将其标记为virtual
并且您的名称有资格:
void B::out(std::ofstrea& outFile)
{
outFile<< index << angle;
}
答案 2 :(得分:0)
除非您在类声明中编写了函数体,否则必须在成员函数名前加上类名:
void B::out(std::ofstream& out)
{
out << index << angle;
}
顺便说一句,你得到了什么确切的错误,如果你能发布确切的错误代码,这会更简单。
答案 3 :(得分:0)
您在成员函数定义之前缺少类名。
void B::out(std::ofstrea& outFile) // Virtual keyword is optional in defintion.
{
// ...
}
答案 4 :(得分:0)
在cpp文件中定义类方法时,必须将类名称作为范围,如下所示:
void B::out(std::ofstrea& outFile)
{
outFile<< index << angle;
}