C ++代理:游戏中的基类未定义错误

时间:2010-11-10 00:56:06

标签: c++ ogre3d

我有6个C ++头文件。有很多包括所以我试图做到这一点,所以我尽量少用。但是我从一开始就一直在说一个错误的“代理”类。我定义它并包含它,并且在这里找不到问题是导致问题的2个头文件:

Sinbad.h:

#ifndef SINBAD_H
#define SINBAD_H

#pragma once
#include "Agent.h"

#define NUM_ANIMS 13  // number of animations the character has. Should be made character specific

class Agent;

class Sinbad : public Agent {

Agent.h:

#ifndef AGENT_H
#define AGENT_H

#include <deque>
#include "aStar.h"

extern Ogre::SceneManager* sceneMgr; // Defined in main.cpp

class GridNode; // forward declarations
class Grid;
class Astar;

class Agent {

以下是我得到的错误:

1>c\gameengine_solution\sinbad.h(12) : error C2504: 'Agent' : base class undefined

3 个答案:

答案 0 :(得分:2)

在定义之前,似乎某些内容指的是Agent类,即可能在aStar.h中。

编辑:在源中的所有地方搜索#define AGENT_H。如果您在Agent.h之外的任何地方找到它,则表示Agent类可能永远不会定义,只是因为Agent.h可能#included AGENT_H#defined {{1}} 1}}。

答案 1 :(得分:1)

请勿在{{1​​}}中重新声明课程Agent。您已加入Sinbad.hAgent.h Agent.hGrid也是如此。

答案 2 :(得分:1)

有些评论表明你不确定向前声明是如何运作的。

当需要告诉编译器类型存在但不需要任何定义时,转发声明一个类型。通常,当类的成员或方法只有指针或类型的引用时,这是在标头中完成的。为了执行涉及解除引用指针或使用引用的任何操作,您需要包含定义类型的头,通常在定义类的方法的源中。