структура c ++ не называет тип - PullRequest
4 голосов
/ 07 марта 2012

Я определяю структуру в заголовочном файле, а затем устанавливаю ее элементы в соответствующем файле .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 Ответ

8 голосов
/ 07 марта 2012

Вам необходимо указать Drawable в файле cpp:

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

В файле cpp вне методов-членов вы работаете вне контекста класса.Внутри методов, которые вы можете использовать Drawable, но снаружи (включая возвращаемый тип) вам нужно использовать GLWindow::Drawable.

Это если вы на самом деле возвращаете Drawable из метода, а не void - тоже ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...