2012-05-24 4 views
0

Qt 4.6으로 작성된 라이브러리를 컴파일하려고합니다. 현재 사용중인 Linux 머신에는 Qt 4.7 만 설치되었습니다. 다음 코드 부분 :Qt 4.7에서 QString (const char *) 생성자로 강제 호출

/*file try.h*/ 
void fileOpen(QString s = NULL) ; 

/*file try.cpp*/ 
void MainWindow::fileOpen(QString s) { 
    QString filename ; 
    if(s.isNull()) filename = QFileDialog::getOpenFileName(
    this, 
    "Choose a file", 
    ".", 
    "Source file (*.)"); 
else filename = s ; 
} 

다음과 같은 오류와 함께 컴파일 (내가 cmake를 사용하지만, 해당 라인의 코드는 위의 하나입니다) :

In member function ‘virtual int MainWindow::qt_metacall(QMetaObject::Call, int,  
void**)’:                       
/homes/combi/hodorog/Developments/axelOld/build/axel/src/QGui/moc_MainWindow.cxx:141:26:   
error: conversion from ‘long int’ to ‘QString’ is ambiguous 
/homes/combi/hodorog/Developments/axelOld/build/axel/src/QGui/moc_MainWindow.cxx:141:26: 
note: candidates are: 
/usr/include/QtCore/qstring.h:426:43: note: QString::QString(const char*) 
/usr/include/QtCore/qstring.h:105:14: note: QString::QString(const QChar*) 

그래서 나는이 문제를 추측하고 QT에 있다는 것입니다 . 4.7. Qt 4.6에서 포인터를 인수로 취할 수있는 두 개의 QString 생성자가 있습니다 (컴파일 오류에 나열된 것처럼). 포인터를 인수로 취할 수있는 단 하나의 QString 생성자가 있습니다. QString이 const char *를 인수로 사용하여 생성자를 호출하도록하려면 어떻게해야합니까?

당신은 0QString 객체를 생성하려고

답변

2

void fileOpen(QString s = NULL);

madalina, 사전에 도움을 많이 감사합니다. 그것은 포인터가 NULL QString null로 혼란스러운 것 같습니다. QString은 생성자 QString()으로 생성 된 것입니다. 함수가 어떻게 구현되는지 (s.isNull() 참조), 함수 선언을

void fileOpen(QString s = QString()); 
+0

으로 변경해야합니다. 실제로 문제였습니다. 지금 일하고 있습니다, 고마워요. – madalina