2016-07-05 7 views
-4

"sizeof(points)"はエラーを投げている部分です(以下にマークします)。私は何が起こっているのか分からない。私はOpenGLの初心者です。私は、それで複数の三角形を描画できるようにするために学んだことを実験しています。要素のPCAFが言ったように私もsizeof(Points)はあなたにポインタのサイズを与え、pastebin here"不完全な種類が許可されていません"エラー

VertexObject.h

#pragma once 

#include <stdio.h> 
#include <stdlib.h> 

#include <GL\glew.h> 
#include <GLFW\glfw3.h> 

class VertexObject 
{ 

public: 
    VertexObject (); 

    void SetArray (GLfloat Points []); 

    void SetBuffer (GLuint* VBO); 

    GLfloat Points [ ] = { 
     1.0f , 0.0f , 1.0f, 
     0.0f , 1.0f , 1.0f, 
     -1.0f , 0.0f , 1.0f 
    }; 

private: 



}; 

VertexObject.cpp

#include "VertexObject.h" 

#include <stdio.h> 
#include <stdlib.h> 

#include <GL\glew.h> 
#include <GLFW\glfw3.h> 

void VertexObject::SetArray (GLfloat Points [ ]) 
{ 

    //Generate Vertex Array Object 
    GLuint vaoID1; 
    //Generates an array for the VAO 
    glGenVertexArrays (1 , &vaoID1); 
    //Assigns the array to the Vertex Array Object 
    glBindVertexArray (vaoID1); 

    //Fills in the array 

    for (int i = 0; i < sizeof (Points); i++) //Error occurs here 
    { 

     this->Points [ i ] = Points [ i ]; 

    } 

} 

void VertexObject::SetBuffer (GLuint* VBO) 
{ 

    //Generate Vertex Buffer Object 
    glGenBuffers (1 , VBO); 
    glBindBuffer (GL_ARRAY_BUFFER , *VBO); 
    glBufferData (GL_ARRAY_BUFFER ,sizeof(Points) , Points , GL_STATIC_DRAW); 

} 
+0

で、サイクルで使用します。 –

+0

ヘッダファイル –

+0

で定義されていますが、 "this-> points"を使用しても、それでもエラーがスローされます –

答えて

0

にコードを配置した、数ではありません配列Pointsにあります。

あなたがsizeof(this->Points)sizeof(Points)を置き換えることができますが、別の問題があることを考えることができます:sizeof(this->Points)はあなたに9(要素の数)が、9 * sizeof(GLfloat)を与えることはありません。

だから、sizeof(Points)/sizeof(Points[0])

使用する必要がありますしかし、私は大きな問題が

GLfloat Points [ ] = { 
    1.0f , 0.0f , 1.0f, 
    0.0f , 1.0f , 1.0f, 
    -1.0f , 0.0f , 1.0f 
}; 

はC++ 11(C++ 11とではないC++ 98のクラスのために有効ではないということだと思います非静的データメンバの初期化C++ 11の機能である)のクラスの配列のための明示的なサイズなければならないので、そう

GLfloat Points [ 9 ] = { 
    1.0f , 0.0f , 1.0f, 
    0.0f , 1.0f , 1.0f, 
    -1.0f , 0.0f , 1.0f 
}; 

しかし、あなたはサイズ明示しなければならない場合、あなたは静的で、それを覚えることができメンバー、

static const std::size_t pointsSize = 9; 
GLfloat Points [ pointsSize ] = { 
    1.0f , 0.0f , 1.0f, 
    0.0f , 1.0f , 1.0f, 
    -1.0f , 0.0f , 1.0f 
}; 

のようなもの、それはあなたがどこかのポイントを定義していないを意味し、このよう

for (auto i = 0U ; i < pointsSize ; ++i) 
{ this->Points [ i ] = Points [ i ]; } 
+0

私が得ないのは、SetArrayでは動作しますが、SetBufferでは動作しないということです。 –

+0

@JamesYeoman - 申し訳ありませんが、あなたの最後のコメントを理解できません(私のせいです:私は英語の母国語ではありません):私の提案は 'setArray()'で正しく動作しますが、 'setBuffer()'で?とにかく、setBuffer()で 'sizeof(Points)'を使うのとは全く違うことを数えてください。 (続き) – max66

+0

@JamesYeoman - (続き)最初の: 'setBuffer()'の 'Points'はメソッドパラメータではカバーされないので、' sizeof(Points) 'のようにsizeof(this-> Points)'です。 2番目: 'setBuffer()'では要素の数ではなく配列のサイズが必要なので、 'getBufferData()'を呼び出す 'pointSize'を使うと' Points '。結論(私が間違っていない場合): 'setBuffer()'の 'sizeof(Points)'は 'sizeof(Points)'のままでなければなりません。 – max66

関連する問題