4

私はC++とOpenGLに非常に慣れておらず、シーンに3Dオブジェクトを表示しようとしています。1つで問題なく動作しましたが、コードを変更して1秒追加しようとすると、カメラの位置を示すHUDテキストに関するコードでエラーが発生し始めました。上記のエラーが表示され、明らかにsstreamファイル(#include)にあります。私は周りを探して助けを求めようとしましたが、助けになる/理解できるものは何もありません。#include行とそれを使用するコードをコメントアウトすると、「エラーC2143:構文エラー:';'がありません」という同様のメッセージが表示されます。main.cppファイルで「使用する」前に。

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に不慣れだと言ったとき、私は本当に非常に新しいです。これは私の最初の投稿ですらあります。やがてそこに着きます。

4

4 に答える 4

21

';'を付ける必要があります 各クラスの後

つまり、

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

最後のセミコロンが恋しいと思います。

于 2012-04-11T15:58:34.393 に答える
1

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

これはまさにマットとデビッドが以前に提案したことです。

于 2012-04-11T15:55:58.820 に答える
0

このファイルに含めたすべてのファイルを確認する必要があります。おそらく「SceneObject.h」では..「;」が不足しているようです "{" "}" と "(" ")" も検証します。これは、間違いが少し厄介な場合があるためです。

于 2012-04-11T15:41:20.160 に答える
0

すべてのインクルード/関数/呼び出しなどには、コード行を実行する本体があります.C++は空白を無視するため、行が停止したときにプログラムに伝える必要があります。これはアクションのみを実行し、他のアクションと混同しないようにプログラムに伝えますアクションが終了したら、";"

C++ アプリをコンパイルする必要があるため、これを正しく行わないとエラーが発生します。これはあなたが遭遇しているエラーですので、見逃している場所を見つけて";"追加してください

これがお役に立てば幸いです。

于 2012-04-11T15:12:55.900 に答える