c ++ struct没有命名类型

时间:2012-03-07 07:49:39

标签: c++ qt

我在头文件中定义一个结构,然后在相应的.cpp文件中设置它的成员。为此,我使用的函数应该在其范围内创建(相同)结构,然后返回它。像这样:

标题中的

#include <things>
class GLWindow : public QGLWidget, public QGLFunctions
{
    Q_OBJECT
public:
    GLWindow(QWidget *parent = 0);
    ~GLWindow();

    //....
    struct Drawable
    {
        GLuint     vertexBuffer;
        GLuint     indexBuffer;
        int        faceCount;
        QMatrix4x4 transform;
    }cube;
    GLuint cubeTex;

    Drawable CreateDrawable(GLfloat* C_vertices, GLfloat* C_tex, GLfloat* C_normals, GLushort* C_facedata, int faces);
    //.....
};
cpp文件中的

#include "glwindow.h"

Drawable GLWindow :: CreateDrawable(GLfloat *C_vertices, GLfloat *C_tex, GLfloat *C_normals, GLushort *C_facedata, int faces)
{
    int faceCount =faces;

    QMatrix4x4 Transform;
    Transform.setToIdentity();

    GLuint VB;
    /*Create vertexbuffer...*/

    GLuint IB;
    /*Create indexbuffer...*/

    Drawable drawable;
    drawable.faceCount = fCount;
    drawable.transform = Transform;
    drawable.vertexBuffer = VB;
    drawable.indexBuffer = IB;

    return drawable;
}

void GLWindow :: someOtherFunction()
{
    //.....
    cube = CreateDrawable(cube_vertices, cube_tex, cube_normals, cube_facedata, cube_face);
    //.....
}

我收到一条错误,指出'Drawable'没有命名类型,但我无法理解为什么我会收到此错误,或者我可以做些什么来消除它。

1 个答案:

答案 0 :(得分:8)

您需要在cpp文件中限定Drawable

GLWindow::Drawable GLWindow :: CreateDrawable(GLfloat *C_vertices, GLfloat *C_tex, GLfloat *C_normals, GLushort *C_facedata, int faces)

在cpp文件中,在成员方法之外,您在类上下文之外操作。在方法内部,您可以使用Drawable,但在外部(包括返回类型),您需要使用GLWindow::Drawable

如果您实际上是从方法返回Drawable而不是void - 那也是错误。