C++ 在C++;

C++ 在C++;,c++,c++14,C++,C++14,假设a有以下代码: struct Joe { const double weigth = 88.6; const double heigth = 185.6; const double X = Alice().heigth; // Error: undeclared identifier. }; struct Alice { const double weigth = 65.2; const double heigth = 179.1; cons

假设a有以下代码:

struct Joe {
    const double weigth = 88.6;
    const double heigth = 185.6;
    const double X = Alice().heigth; // Error: undeclared identifier.
};

struct Alice {
    const double weigth = 65.2;
    const double heigth = 179.1;
    const double X = Joe().heigth; // No issues
};

在Alice的结构中,我可以访问Joe的变量,但是在Joe的结构中,我不能访问Alice的参数,因为它是在Alice之前声明的。有什么解决方案吗,我不能在任何地方“google”它?

生成X静态常量,在Joe中声明X,但不要在sruct中初始化。Init Joe::Alice定义后的x。
const double Joe::X=Alice().heigth

如果您要求
Joe::X
必须默认初始化为
Alice().height
和v.v(对于
Alice::X
),我认为不存在解决方案。类的声明本身是相互依赖的,因此是循环的

如果不要求所述变量必须默认初始化,则可以在
Joe.hpp
中声明类
Joe
,并在
Alice.hpp
中声明类
Alice
。在
Joe.cpp
中,可以包含
Alice.hpp
并初始化
Alice::X
Joe::X
的v.v

示例Joe.hpp

#包括“Joe.hpp”
#包括“Alice.hpp”
乔:乔()
:X(Alice().高度)
{}

我不确定我是否理解正确。如果我这样做了,您是否建议在Alice的struct之后使用
struct Joe{}中声明的静态变量X访问
Alice().heigth
?这是可行的,我尝试了类似的方法,但我的目标是让一切都保持在适当的位置,即在
structjoe{}。对于创建Joe和初始化Joe::X,必须创建Alice对象,但是对于初始化Alice::X,应该创建和初始化Joe::对象,所以结果是循环依赖关系。可以使用静态成员找到解决方案。请注意,
static
使beast变得非常不同<代码>乔x{16.2,99.8,42}
将具有非常不同的、不可编译的行为。这是正确的@Josh。我怀疑是否有办法将初始化保留在结构中,因为如果循环依赖项存在,可能会有类似的模板向导来解决问题,但很可能会得到可读性较差的结果。如果没有更多关于真正问题的信息,很难说。看起来像是一个构造器的工作。这件事的真实情况是什么?我们可能会建议一个更好的有针对性的解决方案。如果与问题无关,请不要标记CLion。我明白了,谢谢,它成功了。