Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这个结构声明有什么问题?_C++_Struct_This - Fatal编程技术网

C++ 这个结构声明有什么问题?

C++ 这个结构声明有什么问题?,c++,struct,this,C++,Struct,This,我用新的“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 = "W

我用新的“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."; 


};
它给出了错误“在“this”之前预期的非限定id”。我一直想把它修好,但我想不出来。任何建议都将不胜感激

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.";
游戏结构

也许你想做的是:

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."; 
}


};

上述解决方案,
scene\u container[0]
scene\u one
不引用相同的场景
scene\u container
只是从
scene\u one
复制分配,这是毫无意义的,因为它们都是在构建
game\u 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;
}

我认为你不能在这里使用“this”指针。尝试在结构声明中定义的函数中使用它。它如何在游戏结构声明之外使用?它在花括号中…@Monkeyanator声明与函数中的声明不同,对吗
隐式传递给对象成员函数的所有非静态函数调用。重新布线OP代码的逻辑以修复较小的编译器错误不是一个可接受的答案,特别是当涉及数组到指针衰减等较差功能时,如果Monkeyanator通过scene_一个引用编辑,然后通过scene_容器[0](比如说,在某种迭代器中)阅读,那么他会非常震惊。据我所知,他希望在类本身中有一个方便的指针,我给出了实现这一点的代码。
scene_one.scene_message : 
scene_container[0].scene_message : Welcome to the home screen of the game.