2

因此,我正在尝试使用 Visual Studio 2010 在 C++ 中制作基于文本的游戏。以下是一些我认为相关的代码块。如果您需要更多,请随时问我。

我正在尝试为名为场所的游戏创建一个类。我做了一个地方,它在它的北、南、东和西都有另一个“地方”。我现在真的很困惑。我是这个东西的菜鸟。我可能只是在看一些东西。

//places.h------------------------
#include "place.h"

//Nowhere place
string nowheredescr = "A strange hole to nowhere";
place nowhere(&nowheredescr, &nowhere, &nowhere, &nowhere, &nowhere); //Error occurs here
//

//place.h------------------------
#ifndef place_h
#define place_h

#include "classes.h"

class place
{
public:
    place(string *Sdescription, place *Snorth, place *Ssouth, place *Swest, place *Seast);
    ~place(void);
private:
    string *description;
    place *north;
    place *south;
    place *east;
    place *west;
};

#endif

//place.cpp-------------------
#include "place.h"
#include <iostream>


place::place(string *Sdescription, place *Snorth, place *Ssouth, place *Swest, place *Seast)
{
    description = Sdescription;
    north = Snorth;
    south = Ssouth;
    west = Swest;
    east = Seast;
}


place::~place(void)
{
}
4

1 回答 1

2

以下语法将解决错误

place nowhere = place(&nowheredescr, &nowhere, &nowhere, &nowhere, &nowhere);

这在 C++03 标准 3.3.1/1 中进行了解释

名称的声明点紧跟在其完整声明符之后(第 8 条)和初始化器之前(如果有)

在 OP 示例中,place nowhere(.....)表示一个声明符,因此nowhere用作构造函数的参数被认为是未声明的。在我的示例中, theplace nowhere是一个声明器并且place(.....)是一个初始化器,因此nowhere在此时被声明。

于 2012-08-15T06:27:27.407 回答