0

グローバル変数を使うのと同じように、

const double GRAVITY = 9.81;

int main(){}

グローバル構造を使いたい

typedef struct {
    double gravity;
} WorldConfig;

WorldConfig WC;
WC.gravity = 9.81;

int main(){}

しかし、これはコンパイルされません (「WC」は型を指定しません)。

これを行う方法はありますか、または代わりに、グローバル構造体を使用することが非常に悪い考えになる正当な理由はありますか?

どうも

4

4 に答える 4

2

C++ では は必要ありtypedefません。これは C ではありません。また、gravity初期化子でメンバーを設定する必要があります。

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

ただし、そのような定数の場合、おそらく実際に定数にしたいので、次のようにすることができます。

struct WorldConfig
{
    static constexpr double gravity = 9.81; // requires C++11
};
于 2013-04-17T07:46:03.577 に答える
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;
}
于 2013-04-17T08:04:45.620 に答える
1

別の解決策は次のとおりです。

あなたのヘッダーで:

struct WC
{
   static const double g;
};

ソース ファイル内:

const double WC::g = 9.81;

匿名構造体と typedef の使用は、C++ ではなく C スタイルであることに注意してください。

于 2013-04-17T07:47:12.943 に答える