Visual Studio 2015中的宏参数限制

时间:2015-10-02 11:28:38

标签: c++ visual-studio gcc macros

我正在使用visual studio 2015移植到一些使用gcc在linux中构建的代码。

在VS中我得到错误错误C2059:语法错误:'+ ='当使用带参数“+ =”的宏DEFOP时,与其他参数相同。这是代码:

#define DEFOP(OP) \
    Matrix& Matrix::operator OP (const double& val) { \
        for (int i = 0; i < _n; i++) { \
            _data[i] OP val; \
        } \
    return *this; \
    } \
    Matrix& Matrix::operator OP (const Matrix& that) { \
    if (_rows != _rows || _cols != that._cols) { \
            throw Exception (String ( \
                "Matrix size mismatch in operation '%s': " \
        "(%d,%d) vs. (%d,%d).", \
                __STRING(OP), _rows, _cols, that._rows, that._cols)); \
    } \
        for (int i = 0; i < _n; i++) { \
            _data[i] OP that._data[i]; \
        } \
    return *this; \
    }
DEFOP(+=);
DEFOP(-=);
DEFOP(*=);
DEFOP(/=);
#undef DEFOP

有人知道如何修改此代码以便在VS中构建吗?

1 个答案:

答案 0 :(得分:0)

由于__STRING是非标准宏,因此并非所有编译器都接受它。将宏参数用作字符串文字的常用方法是使用#,即您应将__STRING(OP)替换为#OP