0

Qt 4.6 で書かれたライブラリをコンパイルしようとしています。私の現在の Linux マシンには、Qt 4.7 しかインストールされていません。次のコード部分:

/*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 コンストラクターが 2 つあります (コンパイル エラーにリストされています)。ポインターを引数として取ることができる QString コンストラクターは 1 つだけです。const char * を引数として QString にコンストラクターを呼び出すように強制するにはどうすればよいですか?

マダリナ、事前に助けてくれてありがとう

4

1 に答える 1

2

void fileOpen(QString s = NULL);

QStringでオブジェクトを構築しようとしています0。ポインターの null と null を混同しているようですQString。nullQStringは、コンストラクターで作成されるものQString()です。関数の実装方法 ( を参照s.isNull()) を考慮して、関数宣言を次のように変更する必要があります。

void fileOpen(QString s = QString());
于 2012-05-24T10:44:32.520 に答える