2012-05-24 62 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。有兩個QString構造函數可以將指針作爲參數(在編譯錯誤中列出),而在qt 4.6中。只有一個QString構造函數可以將指針作爲參數。我如何強制QString使用const char *作爲參數調用構造函數?

感謝很多的幫助提前, madalina

回答

2

void fileOpen(QString s = NULL);

您正在試圖構建一個QString對象與0。看來你正在將空指針與空的QString混淆。空QString是用構造函數QString()創建的。鑑於你的功能是如何實現的(指s.isNull()),你應該在函數聲明改爲

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

的確不錯,這就是問題所在。現在在工作,非常感謝。 – madalina

相關問題