C ++访问指向另一个源文件中的类的指针的向量

时间:2013-08-20 23:28:03

标签: c++ class pointers stdvector

**重新思考更有意义

我有3个类,我希望这些类的实例能够相互交互,而不是通过控制器对象。我遇到的问题是他们没有在其他.h文件中定义,我不知道如何正确地做到这一点。以下是一些要解释的代码;

game.cpp:

#include "game.h"
#include "Class - cEntity.h"
#include "Class - cGUI.h"

cGui *gui;

vector<cEntity*>    entities;

Class - cEntity.h:

#include "game.h"
#include "Class - cGui.h"

extern cGui *gui;

class cEntity{
...
};

我编译使用此结构的代码,我得到2个错误;

错误7错误C2143:语法错误:缺少';'在'*'c:\ dropbox \ of_v0.8.0_vs_release \ apps \ myapps \ zombierts \ src \ entities.h之前10

错误8错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ dropbox \ of_v0.8.0_vs_release \ apps \ myapps \ zombierts \ src \ entities.h 10

任何人都可以帮助澄清我哪里出错了吗?

由于

3 个答案:

答案 0 :(得分:1)

您可以为矢量创建标题。像这样:

<强> cEntity.h:

class cEntity
{
    // ...
};

<强> interests.h:

#include <vector>

class cEntity;

extern std::vector<cEntity*> interests;

现在进行实施:

<强> cEntity.cpp:

#include "cEntity.h"

// implement member functions and define static data members

<强> interests.cpp:

#include "interests.h"

std::vector<cEntity*> interests;

在您需要引用向量的所有地方,添加#include "interests.h",如果您需要对实际实体进行操作,还需要#include "cEntity.h"

答案 1 :(得分:0)

使用单例模式。来自C++ Singleton design pattern的代码。然后你可以拥有矢量兴趣;在你的单身人士课上。

class S
{
    public:
        static S& getInstance()
        {
            static S    instance; // Guaranteed to be destroyed.
                                  // Instantiated on first use.
            return instance;
        }
    private:
        S() {};                   // Constructor? (the {} brackets) are needed here.
        // Dont forget to declare these two. You want to make sure they
        // are unaccessable otherwise you may accidently get copies of
        // your singleton appearing.
        S(S const&);              // Don't Implement
        void operator=(S const&); // Don't implement
};

答案 2 :(得分:0)

  • 如果您尝试访问另一个类中的容器,可以通过多种方式执行此操作。首先,如果你已经有两个班级。您可以将cEntity的向量声明为公共。你甚至可以添加Typedef std :: vector cEntityType; cEntityType兴趣;
  • 如果你的cEntity向量是公共的,你可以创建一个包含这个向量的类实例,比方说C类。拥有C类实例后,您可以通过调用它来访问cEntity容器; c->兴趣或c.interests。这是有效的,因为您正在创建C类的实例,然后访问其公共类和公共变量。您将制作cEntity矢量的副本。
  • 另一方面,如果您尝试将cEntity的矢量设为全局并且只有一个副本,则可以使矢量为静态。因此,您可以随时随地访问它,任何人都可以修改它。