MSVC에서 제대로 빌드되지만 MinGW로는 빌드하지 못하는 기존 C++ 및 Qt 프로그램이 있습니다.MSVC2013과 MingW의 차이로 인해 가장 많이 발생하는 구문 분석 문제가 발생합니다.
main.cpp:31: error: C2086: 'QString foo' : redefinition
: 오류를 제공
//main.cpp
#include <QString>
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(const QString &foo, const QString &bar, const QString baz)
: foo_(foo), bar_(bar), baz_(baz) {}
QString foo_;
QString bar_;
QString baz_;
};
int main(int argc, char **argv) {
QString foo = QString("foo");
QString bar = QString("bar");
QString baz = QString("baz");
MyClass my(foo, bar, baz);
QString a = QString(foo);
QString b = QString(bar);
QString c = QString(baz);
MyClass my2(a,b,c);
MyClass my3(QString(foo), QString(bar), QString(baz));
//MyClass my4(QString(foo), QString(bar), QString(foo)); //redefinition error
return 0;
}
: 나는 최소한에 문제 작업 예를 추출한
Redefinition of 'QString foobar'
:는 MinGW에서
나는 다음과 같은 구문 오류를 많이 얻을
주석에서 지적한 바와 같이 내 문제는 "대부분의 v"라는 구문 분석 문제로 인해 발생합니다. 파싱 exing ". 이러한 지식을 바탕으로 MSVC와 MinGW간에 다음과 같은 차이점을 발견했습니다. 다음의 코드는 아니지만는 MinGW에서 MSVC2013에서 컴파일 :
MyClass my5(QString(foo), QString(bar), QString(foo), Foo::Foobar(5));
"푸 ::는 foobar (5)"MSVC는 변수 선언 등이 줄을 볼 수됩니다 추가,하지만는 MinGW는 여전히으로 이것을 보는 것 같다 함수 선언.
제 질문은 GCC의 일부 컴파일 플래그를 통해이 문제를 해결할 수 있습니까? 아니면 모든 프로젝트를 리펙토링하여 가장 복잡한 구문 분석 문제가 발생하지 않도록해야합니까? 이 함수의 문법 사양과 일치하므로
MyClass my4(QString(foo), QString(bar), QString(foo));
:
바보 같은 질문 : QT는 MinGW 32Bit 용 라이브러리 만 포함하고 있으며 64 비트를 대상으로합니다. 이 문제를 해결 했습니까? –
해당 프로그램을 제거하고 mcve를 생성해야합니다. http://stackoverflow.com/help/mcve –
코드를 표시해야합니다. 코드가 유효하지 않으며 MSVC가 GCC만큼 엄격하지 않을 가능성이 있습니다. – rubenvb