2012-03-10 51 views
1

因此,我想在我的電子表格應用程序的「文件」菜單中創建「最近的文件」部分。在構建應用程序時,應該更新recentFileActions QStringList的函數會生成以下錯誤/home/axel/QtSDK/Code/QMainWindow/mainwindow.cpp:-1: error: undefined reference to 'MainWindow::recentFiles'未定義的靜態QStringList引用

那麼從錯誤中得到recentFiles未定義?因爲我有這在我的頭的專用部分:QStringList static recentFiles;

這是整個updateRecentFileActions()功能:

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()); 
} 

我來補充缺失的信息。

謝謝。

回答

5
QStringList static recentFiles; 

這只是聲明。您需要在源文件中定義的靜態變量:

QStringList MainWindow::recentFiles; 

如果你不明白爲什麼你需要做的,看看到見this faq item

+0

你的意思是我需要粘貼'QStringList MainWindow :: recentFiles;'在.cpp中的某個地方?或者我需要改變'QStringList static recentFiles;'''QStringList MainWindow :: recentFiles;''?因爲如果我嘗試添加'QStringList MainWindow :: recentFiles;'到我的.cpp中的構造函數或在創建問題的函數中,我得到一個無效的限定名稱錯誤使用:(....對不起,我是new to C++ – Axel 2012-03-10 20:31:33

+0

@Axel如果你在頭文件中聲明瞭成員變量static,那麼你需要在源文件(.cpp)中定義,如果你沒有聲明爲static,那麼你就不需要這樣做,參見[ faq 10.12](http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12) – 2012-03-10 20:34:05

+0

理想情況下,我想將recentFiles聲明爲static,這意味着我需要在.cpp。爲了定義recentFiles,我想我需要複製'QStringList MainWindow :: recentFiles;'在.cpp? – Axel 2012-03-10 20:38:31

相關問題