4

我对 C++ 和 Open GL 非常陌生,我一直在尝试在场景中显示 3D 对象。它与一个工作正常,但是当我尝试更改我的代码以添加第二个时,我关于显示相机位置的 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没有 a ;。这可能是;错误消息所指的缺失。一旦您在代码中包含标头,它很可能会导致您的问题。

这正是 Mat 和 David 之前建议的。

于 2012-04-11T15:55:58.820 回答
0

每个包含/函数/调用等都有一个执行一行代码的主体,因为 C++ 忽略空格,当行停止时,您需要告诉程序这将只运行一个动作而不会将其与其他动作混淆,以告诉您的程序当一个动作结束时,你放一个";"

因为您需要编译 C++ 应用程序,所以当您不正确执行此操作时会遇到错误。这是你遇到的错误,所以找出你错过的地方";"并添加它

我希望这能够帮到你。

于 2012-04-11T15:12:55.900 回答
0

您应该查看包含在此文件中的所有文件。也许在“SceneObject.h”中..似乎缺少“;” 但也验证“{”“}”和“(”“)”,因为错误有时会有点棘手。

于 2012-04-11T15:41:20.160 回答