-1

我有以下合成代码。它会产生错误,

#include <iostream>

using namespace std;

class X
{
      private:
              int iX;
      public:
             X(int i=0) : iX(i) { cout <<"Constructing X.."<<endl; } 
             ~X() { cout <<"Destructing X.."<<endl; }

             int getIX() { return iX; } 
};

class Y
{
      private:
              X x(3);
              int jY;
      public:
             Y(int j = 0) : jY(j) { cout <<"Constructing Y.."<<endl; }
             ~Y() { cout <<"Destructing Y.."<<endl; }
             void callGetX() { cout <<"iX is "<<(x.getIX())<<endl; }
};

int main()
{
    Y yObj(1);
    yObj.callGetX();
}

错误:在成员函数 void Y::callGetX() 'x' 中未声明(首先使用此函数)

有什么我错过的吗?谁能告诉我这个场景的构造函数调用机制?

4

2 回答 2

4
X x(3);

这在 C++ 中是不合法的(在 Java AFAIK 中是合法的)。实际上,它使编译器认为这x是一个返回类对象的成员函数,X而不是考虑类x的成员变量X

而是这样做:

Y(int j = 0) : jY(j), x(3) { cout <<"Constructing Y.."<<endl; }
于 2012-05-05T16:35:28.603 回答
3

您将成员放在初始化列表中:

Y(int j = 0) : x(3), jY(j)

你的语法:

class Y
{
private:
   X x(3);
//...
};

是非法的。

于 2012-05-05T16:26:03.413 回答