我用opengl(c ++)创建游戏,我在文件中有命名空间.h:
namespace SR
{
#include "Geometric.h"
//#include others in this namespace
}
当我在main.cpp中创建一些对象并从对象调用方法时(几何) - >它不起作用,但当我删除.h文件中的命名空间时:
//namespace SR
//{
#include "Geometric.h"
//#include others in this namespace
//}
它有效,为什么?。
这是我从.h中删除命名空间并在.cpp中调用方法[其工作]:
#include "shooting_range.h"
int main(int agrc,char** agrv)
{
Geometric p;
p.getCoordinates();
return 0;
}
这是我使用命名空间(错误:未定义引用SR :: Geometric :: Geometric())
#include "shooting_range.h"
int main(int agrc,char** agrv)
{
SR::Geometric p;
p.getCoordinates();
return 0;
}
然后我尝试添加括号[错误:错误:请求'p'中的成员'getCoordinates',这是非类型'SR :: Geometric()]
#include "shooting_range.h"
int main(int agrc,char** agrv)
{
SR::Geometric p();
p.getCoordinates();
return 0;
}
我不知道为什么它不起作用:-(我的英语很糟糕,我很抱歉......我试着解释最好的......我很困惑。
_________- 编辑: 我将命名空间重定位到geometric.h,但仍然无法工作。 (在'p'中请求成员'getCoordinates',这是非类型'SR :: Geometric()) Geometric.h:
#ifndef _GEOMETIC_H_
#define _GEOMETIC_H_
#include <GL/gl.h>
#define MAX_VERTEX 300
struct coordinates
{
GLdouble x,y,z;
GLdouble n_x,n_y,n_z;
GLubyte r,g,b;
};
namespace SR
{
class Geometric
{
public :
int a;
Geometric();
void draw();
void rotate(GLdouble angle,GLdouble x,GLdouble y,GLdouble z);
void translate(GLdouble x,GLdouble y,GLdouble z);
void scale(GLdouble x,GLdouble y,GLdouble z);
coordinates* getCoordinates(); //get all vertex
coordinates getCoordinates(GLint); //get data spacific vertex - if vertex == null => error
GLboolean setCoordinates(coordinates*,GLint); //initialization all vertex through parameters
GLboolean setCoordinates(coordinates,GLint); //change data specific vertex
protected :
GLshort number; //number of vertex, maximal number of vertex is macro MAX_VERTEX
coordinates* vertex;
GLdouble matrix[16];
};
}
#endif // _GEOMETIC_H_
Geometric.cpp
#include "Geometric.h"
SR::Geometric::Geometric()
{
vertex = NULL;
number = 0;
}
coordinates* SR::Geometric::getCoordinates()
{
return vertex;
}
coordinates SR::Geometric::getCoordinates(GLint i)
{
return vertex[i];
}
GLboolean SR::Geometric::setCoordinates(coordinates* vertex,GLint number)
{
if(number <= 0 || number > MAX_VERTEX)
return -1;
if(this->vertex)
delete[] vertex;
this->vertex = new coordinates[number];
this->number = number;
for(int i = 0;i < number;i++)
{
this->vertex[i] = vertex[i];
}
return 0;
}
GLboolean SR::Geometric::setCoordinates(coordinates vertex,GLint i)
{
if(number <= 0 || i >= this->number)
return -1;
this->vertex[i] = vertex;
return 0;
}
#include "shooting_range.h"
的main.cpp
int main(int agrc,char** agrv)
{
SR::Geometric p();
p.getCoordinates();
return 0;
}