这是我的第一个问题,也是我第一次无法通过环顾四周找到解决C ++问题的解决方案。我在这方面相对缺乏经验,并且不确定什么是相关的,所以我会发布我认为可能有用的任何内容。
我正在使用SDL制作跨平台应用程序。我在Windows 7(64位)上使用MinGW 4.6.1,在另一台计算机上使用Ubuntu。
它在Ubuntu(使用g ++)上编译没有任何抱怨,但是当我尝试使用g ++在我的Windows机器上编译时出现以下错误:
...matrix.cpp:77:17: error: expected primary-expression before '/' token
...matrix.cpp:78:11: error: expected primary-expression before '/' token
...matrix.cpp:79:17: error: expected primary-expression before ')' token
...matrix.cpp:79:28: error: expected primary-expression before ')' token
...matrix.cpp:80:19: error: expected primary-expression before ')' token
...matrix.cpp:80:30: error: expected primary-expression before ')' token
据我所知,函数没什么特别的(特别是因为它在我的Ubuntu设置上编译得很好):
Matrix *Matrix::projection(float near, float far, float top, float right) {
x1 = near/right;
y2 = near/top;
z3 = -(far+near)/(far-near);
z4 = -(2*far*near)/(far-near);
w3 = -1.0;
y1 = z1 = w1 =
x2 = z2 = w2 =
x3 = y3 =
x4 = y4 = w4 = 0.0;
return this;
}
如果重要,这是Matrix类:
class Matrix { // row-major matrix
public:
float x1, y1, z1, w1, x2, y2, z2, w2, x3, y3, z3, w3, x4, y4, z4, w4;
Matrix();
Matrix (float a, float b, float c, float d, float e, float f, float g, float h, float i, float j, float k, float l, float m, float n, float o, float p);
Matrix (float *f);
Matrix *identity();
Matrix *translation(float x, float y, float z);
Matrix *rotation(float a, float i, float j, float k);
Matrix *rotation(Quaternion q);
Matrix *projection(float near, float far, float top, float right);
Matrix operator*(Matrix m);
void operator*=(Matrix m);
Matrix operator/(float f);
void operator/=(float f);
Matrix operator*(float f);
void operator*=(float f);
void operator=(float *f);
float *getArray();
};
答案 0 :(得分:7)
我猜测near
和/或far
被定义为宏,可能会编译古老的16位DOS / Windows代码。
尝试在功能之前添加#undef near
和#undef far
,看看是否有帮助。