Что не так с этим объявлением структуры? - PullRequest
0 голосов
/ 03 декабря 2011

Я объявил структуру с новой "game_struct".Содержит следующее:

struct game_struct{

scene scene_container[10]; 

player cPlayer;;

scene scene_one;

this->scene_container[0] = scene_one; 
this->scene_container[0].image = " "; 
this->scene_container[0].scene_message = "Welcome to the home screen of the game."; 


};

Выдает ошибку «Ожидаемый безусловный идентификатор перед« этим »»Я пытался это исправить, но я не могу понять это.Любые советы будут высоко ценится.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011
this->scene_container[0] = scene_one; 
this->scene_container[0].image = " "; 
this->scene_container[0].scene_message = "Welcome to the home screen of the game.";

Вы не можете использовать this вне функции game_struct

Вероятно, вы хотели сделать следующее:

struct game_struct{

scene scene_container[10]; 

player cPlayer;

scene scene_one;

game_struct(){
   this->scene_container[0] = scene_one; 
   this->scene_container[0].image = " "; 
   this->scene_container[0].scene_message = "Welcome to the home screen of the game."; 
}


};
0 голосов
/ 03 декабря 2011

В приведенном выше решении scene_container[0] и scene_one НЕ ссылаются на одну и ту же сцену.scene_container - это просто копия, присвоенная из scene_one, что бессмысленно, так как они оба создаются по умолчанию при построении game_struct.Это намного лучше:

struct game_struct {

        scene scene_container[10];

    player cPlayer;

    scene* scene_one;

    game_struct() {
        scene_one = scene_container; // points to first element
        scene_one->image = " ";
        scene_one->scene_message =
                "Welcome to the home screen of the game.";
    }

};

Редактировать: ну, я надеялся, что мне не придется это прописывать.Но, похоже, это мой первый минус, я думаю, мне придется:

#include <string>
#include <iostream>
using namespace std;

struct scene {
    string image;
    string scene_message;
};
struct player {};

struct game_struct {

    scene scene_container[10];

    player cPlayer;

    scene scene_one;

    game_struct() /* all members are default constructed PRIOR TO ENTERING constructor block */
    {
        this->scene_container[0] = scene_one; /* this is not copy constructing, this is
            COPY ASSIGNING two identically constructed
            scene objects. All it does it non static member
            copy assignment for every member of scene_container[0] */
        this->scene_container[0].image = " ";
        this->scene_container[0].scene_message =
                "Welcome to the home screen of the game.";
    }
};

int main(int argc, char** argv) {
    game_struct gs;
    cout << "scene_one.scene_message : " << gs.scene_one.scene_message << endl;
    cout << "scene_container[0].scene_message : " << gs.scene_container[0].scene_message << endl;
}

Не удивительно, что это:

...