我有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
答案 0 :(得分:2)
在定义之前,似乎某些内容指的是Agent
类,即可能在aStar.h
中。
编辑:在源中的所有地方搜索#define AGENT_H
。如果您在Agent.h
之外的任何地方找到它,则表示Agent
类可能永远不会定义,只是因为Agent.h
可能#included
AGENT_H
已#defined
{{1}} 1}}。
答案 1 :(得分:1)
请勿在{{1}}中重新声明课程Agent
。您已加入Sinbad.h
。 Agent.h
Agent.h
和Grid
也是如此。
答案 2 :(得分:1)
有些评论表明你不确定向前声明是如何运作的。
当需要告诉编译器类型存在但不需要任何定义时,转发声明一个类型。通常,当类的成员或方法只有指针或类型的引用时,这是在标头中完成的。为了执行涉及解除引用指针或使用引用的任何操作,您需要包含定义类型的头,通常在定义类的方法的源中。