其他文件中的C++类
我上课有点问题。 以下是我的一些代码:其他文件中的C++类,c++,class,C++,Class,我上课有点问题。 以下是我的一些代码: //GameMap.h #ifndef GAMEMAP_H #define GAMEMAP_H #include "apath.h" class GameMap { /*class definition here*/ }; #endif 及 我不能在apath.h中使用GameMap,当我尝试将GameMap.h包含在此文件中时,我会遇到一些愚蠢的错误。。。我还尝试添加类游戏地图;在定义路径类之前。没有任何帮助。。。我真的需要在这里使用它。。
//GameMap.h
#ifndef GAMEMAP_H
#define GAMEMAP_H
#include "apath.h"
class GameMap
{
/*class definition here*/
};
#endif
及
我不能在apath.h中使用GameMap,当我尝试将GameMap.h包含在此文件中时,我会遇到一些愚蠢的错误。。。我还尝试添加类游戏地图;在定义路径类之前。没有任何帮助。。。我真的需要在这里使用它。。。
如果需要,我可以发布更多的代码
谢谢你的回复 您应该在apath.h中使用类GameMap的正向声明:
class GameMap; // forward declaration
class path
{
//some code...
void DoSomething(GameMap map);
//rest of class body
};
检查:
在下面的示例中,我使用类A的前向声明,以便能够声明使用它的函数useA:
// file a.h
class A;
void useA(A a);
然后在main.cpp中,我有:
#include "a.h"
class A
{
public:
void foo() { cout << "A"; }
};
void useA(A a)
{
a.foo();
}
这是绝对正确的,因为这里已经定义了类A
希望这能有所帮助。在apath.h中进行外部声明
class GameMap;
更改方法签名后:
void DoSomething(GameMap& map);
或
你有一个循环包含问题。h包括apath.h,所以尝试在apath.h中包含GamePath.h最好是脆弱的,在最坏的情况下会出现错误。最好的办法是找到GamePath.h使用了哪些apath.h文件,并将它们重构成一个公共头文件,比如common.h,并在GamePath.h和apath.h中都包含common.h。这样你就不再有一个圆形的包含,你可以画一个包含图作为一个漂亮的DAG。你应该检查这个习惯用法 在路径头中:
class GameMap;
class Path
{
public:
void useMap( GameMap * map );
};
在路径源中:
#include "Path.h"
#include "GameMap.h"
void Path::useMap( GameMap * map )
{
// Use map class
}
更多链接:和。您正在尝试进行循环包含,这显然是被禁止的 我建议您在apath.h中转发声明GameMap,并将其作为常量引用传递:
class GameMap; // forward declaration
class path
{
//some code...
void DoSomething(const GameMap &map);
//rest of class body
};
const ref比simple ref好,因为它明确地告诉我们对象在函数调用期间不能更改。如何编译代码?好的,那么您在GameMap中使用类路径,在path中使用GameMap?可以使DoSomethingGameMap无效;是否无效DoSomethingGameMap&map;?另外,在GameMap中发布您的错误和路径的使用您的意思是什么?我使用DEV C++,所以明文。如果你的意思是关于文件,我在main中包含了GameMap,而GameMap.way1由于循环依赖性而无法工作。另外,我认为DoSomethingGameMap与DoSomethingconst GameMap是等价的&为什么他需要GameMap的引用?如果他只是需要它来改变一些内部状态,一个副本或常量引用也可以。@LihO woreked:D这不是你第一次帮助我了:thanx!4分钟后接受关键是你仍然可以通过值传递GameMap,正如你第一次写的。这不是PIMPL,只是P。@Pubby:这是真的。但PIMPL在网上有更好的文档,所以他也会理解转发声明。
#include "Path.h"
#include "GameMap.h"
void Path::useMap( GameMap * map )
{
// Use map class
}
class GameMap; // forward declaration
class path
{
//some code...
void DoSomething(const GameMap &map);
//rest of class body
};