C ++:全局结构

时间:2013-04-17 07:39:10

标签: c++ struct global

与使用全局变量相同,

const double GRAVITY = 9.81;

int main(){}

我想使用全局结构

typedef struct {
    double gravity;
} WorldConfig;

WorldConfig WC;
WC.gravity = 9.81;

int main(){}

但这不编译(“WC”没有命名类型)。

有没有办法做到这一点,或者,使用全局结构的一个很好的理由是一个超级坏主意?

THX

4 个答案:

答案 0 :(得分:3)

是的,初始化全局变量:

struct WorldConfig
{
    double gravity;
};

WorldConfig WC = { 9.82 };

int main() { }

答案 1 :(得分:2)

在C ++中,您不需要typedef,这不是C.此外,您需要在初始化程序中设置gravity成员:

struct WorldConfig {
    double gravity;
} WC = {9.81};

但是,对于这样的常量,你可能希望它们真的不变,所以你可以这样做:

struct WorldConfig
{
    static constexpr double gravity = 9.81; // requires C++11
};

答案 2 :(得分:1)

另一种解决方案是:

在标题中:

struct WC
{
   static const double g;
};

在您的源文件中:

const double WC::g = 9.81;

请注意匿名struc和typedef使用的是C风格,而不是C ++。

答案 3 :(得分:1)

即使你把它放在一个类或结构的范围内,如果它是静态的,它仍然是一个全局的。

将它放在结构体中对于元编程世界很有用,即

struct Earth
{
   static const double gravity;
};

struct Mars
{
   static const double gravity;
};

// pseudo code
template< typename PLANET >
someFuncOrClass
{
     using PLANET::gravity;
}

这在编译时得到解决(与使Planet成为具有重力属性的类相比)。

明显的替代范围选项虽然是命名空间。

namespace WC
{
     static double gravity;
}