|
|
我经常看到这样的定义
namespace Ogre
{
class AxisAlignedBox;
class Image;
class ColourValue;
class DataStream;
class Ray;
}
他们把这个放在一个.h文件的开头,说是向前声明,但是感觉没什么意义,因为这些类的头文件都已经包含了,你向前声明能有什么意思哪,这里实在不明白。我模仿他自己做了一个命名空间文件
xiaohua.h
内容为
namespace NAME
{
class xiaohua
{
public:
xiaohua(){name="jack";}
char *name;
char* getname(){return name;}
};
}
然后在main.h中这样用
#include "stdafx.h"
#include "name.h"
namespace NAME
{
class xiaohua;
}
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
xiaohua a;
cout<<a.getname();
char c;
std::cin>>c;
return 0;
}
结果压根就编译不过去,错误内容为
c:\documents and settings\lwming\桌面\ogresample\myvector\myvector.cpp(13): error C2065: “xiaohua” : 未声明的标识符
c:\documents and settings\lwming\桌面\ogresample\myvector\myvector.cpp(13): error C2146: 语法错误 : 缺少“;”(在标识符“a”的前面)
c:\documents and settings\lwming\桌面\ogresample\myvector\myvector.cpp(13): error C2065: “a” : 未声明的标识符
c:\documents and settings\lwming\桌面\ogresample\myvector\myvector.cpp(14): error C2228: “.getname”的左侧必须有类/结构/联合类型
类型是“'unknown-type'”
c:\documents and settings\lwming\桌面\ogresample\myvector\myvector.cpp(14): error C3861: “a”: 即使使用参数相关的查找,也未找到标识符
不知道为什么,如果我把
向前引用注释掉
//namespace NAME
//{
//class xiaohua;
//}
然后换上using namespace NAME;就可以顺利编译通过,谁能给小弟讲讲这方面的问题 |
|