В приведенном выше решении 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;
}
Не удивительно, что это: