2012-04-11 17 views
3

私はC++とOpen GLにはまったく新しいので、シーンに3Dオブジェクトを表示しようとしています。それはうまくいきましたが、コードを変更して2番目のコードを追加しようとすると、カメラ位置を示すHUDテキストに関するコードがエラーを出し始めました。上記のエラーが表示され、明らかにsstreamファイル(#include)にあります。私は周りを探索して助けを求めましたが、助けてくれるものは何もありません。 #include行とそれを使用するコードをコメントアウトすると、同様のエラーが表示されます。「エラーC2143:構文エラー:missing ';'私のmain.cppファイルで 'using'を使う前に。エラーC2143:構文エラー: ';'がありません。 before 'namespace'

私はVisual Studio 2010を実行していますが、私はすべての作業を何度も繰り返して、新しいプロジェクトにコードをコピーしてみました。ヘルプは非常に高く評価されます。

#include <Windows.h> 
#include <GL/gl.h> 
#include <GL/glu.h> 
#include "glut.h" 
#include "SceneObject.h" 
#include <fstream> 
#include <sstream> 
#include <iostream> 
#include <string> 
//#include <cmath> 
//#include <limits> 
//#include <cstdlib> 

using namespace std; 

...

stringstream ss; 
ss << "Camera (" << cam.pos.x << ", " << cam.pos.y << ", " << cam.pos.z << ")"; 
glClear(GL_DEPTH_BUFFER_BIT); 
outputText(-1.0, 0.5, ss.str()); 

...

#ifndef SCENEOBJECT_H 
#define SCENEOBJECT_H 
#include <string> 
#include <iostream> 
#include <fstream> 

using namespace std; 

struct point3D { 
    float x; 
    float y; 
    float z; 
}; 

struct colour{ 
    float r; 
    float g; 
    float b; 
}; 

struct tri { 
    int a; 
    int b; 
    int c; 
}; 

class SceneObject { 
private: 
    int NUM_VERTS; 
    int NUM_COL; 
    int NUM_TRI; 
    point3D * vertices; 
    colour * colours; 
    tri * indices; 
    void drawTriangle(int a, int b, int c); 
public: 
    SceneObject(const string fName) { 
     read_file(fName); 
    } 
    void drawShape() 
    { 
     // DO SOMETHING HERE 
    } 
    int read_file (const string fileName) 
    { 
    ifstream inFile; 
    inFile.open(fileName); 

    if (!inFile.good()) 
    { 
     cerr << "Can't open file" << endl; 
     NUM_TRI = 0; 
     return 1; 
    } 

    //inFile >> shapeID; 

    inFile >> NUM_VERTS; 
    vertices = new point3D[NUM_VERTS]; 

    for (int i=0; i < NUM_VERTS; i++) 
    { 
     inFile >> vertices[i].x; 
     inFile >> vertices[i].y; 
     inFile >> vertices[i].z; 
    } 

    inFile >> NUM_COL; 
    //inFile >> randomCol; 
    colours = new colour[NUM_COL]; 
    /*if (randomCol == 'y') 
    { 
     for (int i=0; i < NUM_COL; i++) 
     { 
      colours[i].r = ((float) rand()/(RAND_MAX+1)); 
      colours[i].g = ((float) rand()/(RAND_MAX+1)); 
      colours[i].b = ((float) rand()/(RAND_MAX+1)); 
     } 
    } 
    else if (randomCol == 'n') 
    {*/ 
     for (int i=0; i < NUM_COL; i++) 
     { 
      inFile >> colours[i].r; 
      inFile >> colours[i].g; 
      inFile >> colours[i].b; 
     } 
    //} 

    inFile >> NUM_TRI; 
    indices = new tri[NUM_TRI]; 

    for (int i=0; i < NUM_TRI; i++) 
    { 
     inFile >> indices[i].a; 
     inFile >> indices[i].b; 
     inFile >> indices[i].c; 
    } 

    inFile.close(); 
    return 0; 
} 
} 
#endif 

私は、コードを変更していないと私は認識しています限り、そこにあるセミコロンがありますであることになっている。 5年間プログラミングしていた私の友人もこれを解決できませんでした。必要に応じて、他の特定のコードを含めます。そして、私がC++とOpenGLに新しいことを言ったとき、私は本当に非常に新しいです。 これは私の最初の投稿さえあります。私は結局そこに着くでしょう。

+5

コードを記述しようとするのではなく、疑念を単に取り除くだけですべて削除してください。質問とコードを編集してください。通常このエラーは、 'struct'または' class'の最後に ';'を忘れたときに発生します。 –

+0

さて、おそらくクラス宣言の末尾に ';'がありません。 – Mat

+0

より具体的には、*名前空間宣言の前*です。 –

答えて

18

あなたは ';'

class foo{ 
public: 
    void bar(); 
}; 

を意味し、私はあなたが最後にセミコロンを逃すと思う各クラス

後。

+1

私は自分自身をハングアップしながら私は間違います... これは、クラスであなたに指摘していないものの種類です-_- – Rainbowdave

+2

あなた自身をハングアップする理由はありません^^私はここの人々のほとんどは同じ間違い^^ – retinotop

1

C言語では、行が停止したときにプログラムに通知する必要がある空白を無視するため、/ function/callなどを含むすべての行にはコード行が実行されるため、あなたのアクションが終了したときにプログラムに伝えるために";"

C++アプリケーションをコンパイルする必要があるため、この操作を行わないとエラーになります。 ウィッヒはあなたが";"を逃すと、私はこれがあなたを役に立てば幸いそれを

を追加する場所ので見つけるに実行されているエラーです。

+0

私はちょうど上記のコードを含んでいて、それは私が書いたことがない何かのエラーを主張しています。そして何かを書く前に、あなたが投稿したコードで – Rainbowdave

0

あなたはこのファイルに含まれているすべてのファイルを見てください。おそらく "SceneObject.h"で.. は ";"の不足しているようです間違いは時にはややこしいかもしれないので、 "{" "}"と "(" ")"を検証します。

+0

その最高を書いています... – MarcoM

+0

コードを置くと、それが間違っていることが明らかになります。 – MarcoM

1

クラスSceneObjectの末尾に;がありません。これはおそらく、エラーメッセージが参照している;がないことになります。コード内にヘッダーを含めると、問題が発生する可能性が最も高くなります。

これはまさにMatとDavidが以前に提案したものです。

関連する問題