2012-03-07 11 views
4

ヘッダーファイルに構造体を定義し、そのメンバーを腐食性の.cppファイルに設定しています。これを行うために、私はそのスコープに(同じ)構造体を作成し、それを返すことになっている関数を使用しています。このような何か:ヘッダー内のC++ structの型名が指定されていません

#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のは' タイプに名前を付けていないことを示すエラーを取得しています、しかし、私はこのエラーをなぜ受けているのか、それを排除するために何ができるのか理解できません。あなたはcppのファイルにDrawableを修飾する必要があり

+1

'CreateDrawable'はヘッダー宣言で' void'を返します。 –

+0

ヘッダーファイルで、 'CreateDrawable(...)ではなくDrawable CreateDrawable(...)にしないでください。 ..) '? – Treb

+0

another.anon.cowardとTrebはい。それを編集しました。 –

答えて

8

:メンバー・メソッドの外に、CPPファイルで

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

、あなたはクラスのコンテキスト外で動作しています。メソッド内でDrawableを使用することはできますが、戻り値の型を含む外部ではGLWindow::Drawableを使用する必要があります。

実際にDrawableを返すのであれば、voidではなく、エラーでもあります。

関連する問題