1

在 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 类中声明。现在我如何才能访问虚拟方法中的变量角度和索引?

谢谢你的帮助。

4

5 回答 5

1

当定义你的函数时,你想使用这样的东西:

void B::out(std::ofstream& outFile)
{
    outFile<< index << angle;       
}

各个类的任何成员都可以在成员函数中访问,而与该函数是否为虚函数无关。

既然谈到了读取或写入数据的函数:除非你真的需要使用std::ofstreamor的特定细节std::ifstream,例如 use open(),否则你可能应该传递std::ostreamorstd::istream引用。这样,函数也可以与不同的流流类型一起使用,例如std::ostringstreamstd::istringstream

于 2012-09-30T13:41:44.640 回答
1

如果您在类之外实现该方法,则不要将其标记为virtual并限定其名称:

void B::out(std::ofstrea& outFile)
{
    outFile<< index << angle;       
}
于 2012-09-30T13:41:47.250 回答
0

除非你在类声明中写了你的函数体,否则你必须在成员函数名前加上类名:

void B::out(std::ofstream& out)
{
   out << index << angle;
}

顺便说一句,您得到了什么确切的错误,如果您可以发布确切的错误代码,这会简单得多。

于 2012-09-30T13:41:27.123 回答
0

您在成员函数定义之前缺少类名。

void B::out(std::ofstrea& outFile)  // Virtual keyword is optional in defintion.
{
    // ...
}
于 2012-09-30T13:41:30.167 回答
0

当你在你的 cpp 文件中定义一个类方法时,你必须给类名作为范围,如下所示:

void B::out(std::ofstrea& outFile)
{
outFile<< index << angle;       
}
于 2012-09-30T13:41:56.360 回答