MinGW C ++: ожидаемое первичное выражение перед токеном '/' - PullRequest
2 голосов
/ 04 января 2012

Это мой первый вопрос здесь, и в первый раз я не смог найти решение проблемы C ++ онлайн, просто посмотрев вокруг.Я относительно неопытен в этой области и не уверен, что имеет значение, поэтому я просто опубликую то, что считаю полезным.

Я использую SDL для создания кроссплатформенного приложения.Я использую MinGW 4.6.1 в Windows 7 (64-разрядная версия), а также настройку Ubuntu на другом компьютере.

Он прекрасно компилируется в Ubuntu (используя g ++) без каких-либо жалоб, но я получаюследующая ошибка, когда я пытаюсь скомпилировать на моей машине Windows с g ++:

...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-setup):

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();
};

1 Ответ

7 голосов
/ 04 января 2012

Мое странное предположение состоит в том, что near и / или far определены как макросы, возможно, чтобы можно было скомпилировать древний 16-битный код DOS / Windows.

Попробуйте добавить #undef near и #undef far перед вашей функцией и посмотрите, поможет ли это.

...