2013-05-13 87 views
1

我是Qt的新手,並已從示範程序here開始。我已將類AddressBook重命名爲Dialog。它編譯和執行得很好。我想我自己的代碼添加到的例子,所以我添加了一個新的標籤作爲類的私有成員:演示程序錯誤:''未在此範圍內聲明

private: 
QCheckBox *native; 
QLabel *integerLabel; 
QLabel *doubleLabel; 
QLabel *itemLabel; 
... 
QLabel *questionLabel; 
QLabel *warningLabel; 
QLabel *errorLabel; 
QLabel *newLabel;  // <== This is new 
QErrorMessage *errorMessageDialog; 

在構造函數對話框::對話框我(嘗試)分配內存的變量:

warningLabel = new QLabel; 
warningLabel->setFrameStyle(frameStyle); 
QPushButton *warningButton = new QPushButton(tr("QMessageBox::&warning()")); 

errorLabel = new QLabel; 
errorLabel->setFrameStyle(frameStyle); 
QPushButton *errorButton = 
new QPushButton(tr("QErrorMessage::showM&essage()")); 

newLabel = new QLabel; // <== Error 
newLabel->setFrameStyle(frameStyle); 

至於我可以告訴大家,我已創建並在這個類中正確分配的變量,通過複製和粘貼* errorLabel和改變它的名字。然而,編譯器會發出錯誤:

error: 'newLabel' was not declared in this scope

當我點擊了錯誤,它需要我在構造函數中的「新」行。如果我在構造函數中指出newLabel中的兩行,則該程序將進行編譯。它在我的腦海裏。我在這裏犯了什麼錯誤?我們如何在將來防止這些類型的問題? (我搜查了幾十個類似的帖子,並且能夠在30s或更少的時間內識別OP的錯誤,但是我找不到我自己的錯誤,我也不能找到在類中聲明變量但在構造函數中找不到變量的帖子。)

由於提前, 凱爾

+0

所以我不得不問。添加了'QLabel * newLabel'這行代碼後,是否真的保存了頭文件? – Chris 2013-05-13 17:44:47

+0

好問題,答案是肯定的(現在很多次)。謝謝。 – Kyle 2013-05-13 17:55:23

+0

你在使用Qt創建器嗎?如果是這樣,當您在構造函數中右鍵單擊「newLabel」並從上下文菜單中選擇「在光標後面跟上符號」時會發生什麼?你有沒有嘗試重建你的項目? – thuga 2013-05-14 08:54:28

回答

1

我已經解決了這個問題。即使這不是我所期望的答案,但我會發布這個答案,以防萬一它對社區的其他人有所幫助。

我創建了一個新項目,並將非工作項目中的cpp/h文件複製到新項目中。新項目編譯。通過新項目,我現在可以將其他私有變量添加到類中,並在構造函數(以及IDE)中訪問它們。我可以輕鬆訪問所有參數,以顯示項目是相同的,但一個編譯而另一個不是。我只能得出結論,項目本身不知何故變得腐敗(這不會激發信心)。

儘管我感到寬慰,但這並不是一個愚蠢的程序錯誤,我對無法找到並修復項目文件中的錯誤感到失望。感謝所有提供建議的人。