C++:通过引用另一个类成员变量来初始化类成员变量?

标签 c++ constructor reference initialization

我正在尝试在 C++ 中创建一个类来存储许多参数的值,这些参数被组织为类“Planet”和类“Satellite”的成员变量,我想通过对实例的引用来初始化它们'行星'。在这里,我提供了一个示例,其中我有一个“PlanetCatalog”类 成员变量 'Planet neptune' 和一个 'Satellite triton'。

class Planet {
    public:

    double a;

    Planet() {}

    void setParams(  const double a_) {
        a = a_;
    }
};


class Satellite {
    public:

    double b;

    Planet & planet;
    Satellite( Planet & planet_):planet(planet_) { }

    void setParams(const double b_) {
        b = b_;
    }
}; 

class PlanetCatalog {

    public:

    Planet neptune;
    Satellite triton(neptune);

    void setAll() {
        neptune.setParams(1.);
        triton.setParams(2.);
    }

};

但是,在编译时我遇到了错误。

error: unknown type name 'neptune' 
    Satellite triton(neptune);

是否可以像我在这里所做的那样将 Planet 和 Satellite 存储为同一类的变量。如果没有,有人可以建议用 C++ 组织此功能的更好方法吗?

最佳答案

使用括号进行类内初始化使编译器将 triton 视为非静态成员函数声明,其中 neptune 是第一个参数的类型,您应该使用 < em>list-initialization 语法改为:

Satellite triton{neptune};

请注意,实际上不需要为此定义PlanetCatalog 构造函数。

关于C++:通过引用另一个类成员变量来初始化类成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53232793/

相关文章:

c++ - 在 VS2012 中使用 CMAKE 将启用增量链接设置为 NO

android - 在模型类中定义构造函数(使用 Cloud Firestore 获取数据)

c++ - 从赋值运算符调用构造函数

android - 使用 QtCreator 使用 BOOST_ALL_NO_LIB 构建 android 时未定义对 boost::system::system_category 的引用

c++ - 如何为 Visual Studio 编译器指定自定义编译器标志

c++ - 找出 vector 中的所有元素是假还是真 C++ 的最快方法?

引用类型中的 C# HasValue

php - 自定义 Composer 自动加载器

c++ - 模板特化和引用

c++ - 引用动态分配的对象 ("at run-time")