15

これについての説明を見つけるために何を検索すればよいかわからないので、質問しています。
エラーを報告する次のコードがあります。

struct Settings{
    int width;
    int height;
} settings;

settings.width = 800; // 'settings' does not name a type error
settings.height = 600; // 'settings' does not name a type error

int main(){
    cout << settings.width << " " << settings.height << endl;

しかし、値の割り当てをメインにすると、機能します。

struct Settings{
    int width;
    int height;
} settings;

main () {
    settings.width = 800; // no error
    settings.height = 600; // no error

理由を説明していただけますか?

編集:
ラルフ・タンデツキーの答えに関して、ここに私の完全な構造体コードがあります。私のスニペット構造体で行ったように、値を割り当てる方法を教えていただけますか?

struct Settings{
    struct Dimensions{
        int width;
        int height;
    } screen;

    struct Build_menu:Dimensions{
        int border_width;
    } build_menu;
} settings;
4

2 に答える 2

9

C++11 では次のように書くことができます

struct Settings {
    int width;
    int height;
} settings = { 800, 600 };

あなたのバグを修正するために。関数本体の外側に値を代入しようとしているため、エラーが表示されます。関数の外部でグローバル データを初期化することはできますが、割り当てることはできません。

編集:

あなたの編集に関しては、ただ書いてください

Settings settings = {{800, 600}, {10, 20, 3}};

I'm not 100% sure, if this works though, because of the inheritance. I would recommend to avoid inheritance in this case and write the Dimensions as member data into your Build_menu structure. Inheritance will sooner or later give you all kinds of trouble, when used this way. Prefer composition to inheritance. When you do that, it's gonna look like

Settings settings = {{800, 600}, {{10, 20}, 3}};
于 2013-06-05T11:41:23.400 に答える