2012-03-10 53 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

相关问题