2012-03-10 29 views
1

スプレッドシートアプリケーションの[ファイルメニュー]に「最近のファイル」セクションを作成します。アプリケーションをビルドする際、recentFileActions QStringListを更新する関数は、次のエラーを生成します。/home/axel/QtSDK/Code/QMainWindow/mainwindow.cpp:-1: error: undefined reference to 'MainWindow::recentFiles'静的なQStringListの未定義参照

したがって、エラーから私はrecentFilesが定義されていませんか?私はこれが私のヘッダのプライベートセクションを持っているので:私は不足している情報を追加します

void MainWindow::updateRecentFileActions(){ 
    QMutableStringListIterator i(recentFiles); 
    while (i.hasNext()) { 
    if (!QFile::exists(i.next())) 
     i.remove(); 
    } 

    for (int j = 0; j < MaxRecentFiles; ++j) { 
    if (j < recentFiles.count()) { 
     QString text = tr("&%1 %2") 
     .arg(j + 1) 
     .arg(strippedName(recentFiles[j])); 
     recentFileActions[j]->setText(text); 
     recentFileActions[j]->setData(recentFiles[j]); 
     recentFileActions[j]->setVisible(true); 
    } else { 
     recentFileActions[j]->setVisible(false); 
    } 
    } 
    separatorAction->setVisible(!recentFiles.isEmpty()); 
} 

QStringList static recentFiles;

これは全体updateRecentFileActions()機能です。

ありがとうございます。

答えて

5
QStringList static recentFiles; 

これは唯一の宣言です。あなたは、ソースファイル内の静的変数を定義する必要があります。

QStringList MainWindow::recentFiles; 

あなたがそれを行う必要がある理由を理解していない場合は、参照してくださいthis faq itemに見てみましょう。

+0

あなたは 'QStringList MainWindow :: recentFiles; 'を.cppのどこかに貼り付ける必要がありますか?またはQStringList MainWindow :: recentFiles;の 'QStringList static recentFiles;'を変更する必要があるかどうかを確認します。 QStringList MainWindow :: recentFiles;を私の.cppのコンストラクタまたは問題を作成している関数に追加しようとすると、修飾された名前のエラーが無効になります:(....申し訳ありませんnew to C++ – Axel

+0

@Axelメンバー変数staticをヘッダに宣言した場合は、ソース(.cpp)ファイルで定義する必要があります。宣言していない場合は、 faq 10.12](http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12) –

+0

理想的にはrecentFilesを静的として宣言したいと思います。これは、私が定義する必要があることを意味します。 .cpp recentFilesを定義するには、.cppのどこかに 'QStringList MainWindow :: recentFiles; 'をコピーする必要があると思います。 – Axel