C++ 为什么我可以预编译c';父亲的托尔,但不是他的属性?cpp

C++ 为什么我可以预编译c';父亲的托尔,但不是他的属性?cpp,c++,C++,早上好。 当我试图预编译时(我不知道这个的真名…),父亲c'tor这样说: Point_3d(int _x, int _y, int _z) :Point_2d(_x, _y, _z), z(_z+100){}; 它起作用了。 但当我准备这样做时: Point_3d(int _x, int _y, int _z) :Point_2d(_x, _y, _z), _x(4), z(_z+100){}; 事实并非如此。(参数'_x'属于父参数。) 还有一个小问题: 为什么我不能使用“=”预编译,而

早上好。 当我试图预编译时(我不知道这个的真名…),父亲c'tor这样说:

Point_3d(int _x, int _y, int _z) :Point_2d(_x, _y, _z), z(_z+100){};
它起作用了。 但当我准备这样做时:

Point_3d(int _x, int _y, int _z) :Point_2d(_x, _y, _z), _x(4), z(_z+100){};
事实并非如此。(参数'_x'属于父参数。) 还有一个小问题: 为什么我不能使用“=”预编译,而我必须使用“()”? 谢谢

假设
\ux(4)
引用
Point\u2D
类的成员,则只能由所属类初始化,而不能由派生类初始化

初始化器列表可以包含基类和当前类的成员,而不是基类的成员

但我不会

Point_3d(int _x, int _y, int _z) :Point_2d(4, _y, _z), z(_z+100){};
___________________________________________^

做你想做的事?

首先,我建议你做两件事。首先给出完整的代码,然后请检查预编译术语。 如果我猜,x和_y是基类成员,z是派生类成员

  • Point_3d(int x,int y,int z):Point_2d(x,y,z),z(z+100){}
  • 将工作,因为您正在从派生类构造函数初始化z(派生类的成员)

  • Point_3d(int x,int y,int z):Point_2d(x,y,z),x(4),z(z+100){
  • 无法工作,因为您试图从派生类构造函数初始化x(基类成员),这是非法的。 尽管您可以为代码段2做一些事情

  • Point_3d(intx,inty,intz):Point_2d(x,y,z),z(z+100){ux=2;}
  • 此处x(基类成员)未在派生类构造函数中初始化,但正在分配它(前提是x在公共范围内)。

    定义“预编译”。在构成当前C++标准的1400多页中(由于您似乎在问C++语言问题),没有一个被提到的所谓“预编译”的东西。