假设C++类具有以下形式的构造函数(除其他构造函数外)

Foo::Foo( FILE *fp ) { etc... }

现在我要创建表单的包装类
class WFoo {
      Foo::Foo A;
      Foo::Foo B;
 };

与构造函数
WFoo::WFoo(FILE *fa, FILE *fb) {
      A(fa), B(fb);
}

WFoo的定义有什么问题?
提前致谢。

最佳答案

这没有任何意义...

class WFoo {
      Foo::Foo A;
      Foo::Foo B;
 };

你的意思是...
class WFoo {
public:
      Foo A;
      Foo B;

      WFoo(FILE* fa, FILE* fb);
 };

WFoo::WFoo(FILE* fa, FILE* fb) :
    A(fa), B(fb)
{
}

还请记住,字段的初始化不是按照您在构造函数中读取的顺序进行,而是按照在类中声明的顺序进行初始化!

所以...
#include <iostream>

struct XFoo
{
    XFoo(const char* s) { std::cout << s << std::endl; }
};

struct YBar
{
    XFoo a;
    XFoo b;

    YBar() : a("A"), b("B") {}
};

struct ZBar
{
    XFoo b;
    XFoo a;

    ZBar() : a("A"), b("B") {}
};


int main()
{
    YBar y;
    ZBar z;
    return 0;
}

将打印出来...
A
B
B
A

10-05 23:49