命名空间中的使用方法不起作用

时间:2018-06-15 06:13:52

标签: c++ class namespaces

我用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;
}

0 个答案:

没有答案