2015-09-04 289 views
-2

爲什麼我的代碼中有「Q undeclared identifier」錯誤?在if和else中未聲明的標識符錯誤if(C++)

if(comboBox1->Text == "bbl/D (BPD)") 
{ 
    double Q = nQ; 
} 
else if (comboBox1->Text == "scf/D (SCFPD)") 
{ 
    double Q = nQ * 11; 
} 
else if(comboBox1->Text == "m^3/D (CUMPD)") 
{ 
    double Q = nQ * 11; 
+1

請通過添加適當的標籤來指定您正在使用的語言。 – D4V1D

+0

看起來像C.在示例中,每個分支都定義了自己的'Q'變量,其持續時間與if語句塊一樣長。將'Q'('double Q;')的聲明移到'if'鏈上。也可以使用'strcmp'而不是'comboBox1-> Text ==「bbl/D(BPD)」',這並不符合你的想法。 –

回答

0

您還沒有發佈完整的代碼。但是您將問題的範圍限制在每​​個if區塊。聲明你的變量if條件之外:

double Q; 
if (comboBox1->Text == "bbl/D (BPD)") 
{ 
    Q = nQ; 
} 
else if (comboBox1->Text == "scf/D (SCFPD)") 
{ 
    Q = nQ * 11; 
} 
else if (comboBox1->Text == "m^3/D (CUMPD)") 
{ 
    Q = nQ * 11; 
+0

Q在if鏈中沒有改變,當我這樣做!在鏈的末尾它將是零。 – mojtaba

0

把我的心理調試的帽子[我購買的廉價從雷蒙德陳:-)],它幾乎肯定後來在那當你真正嘗試使用的代碼Q

聲明Q塊內,如:

{ 
    double Q = 42.0; 
} 

在大多數類似C語言將看到它走出去的範圍在右括號,這意味着你將無法再使用它。

如果以後要使用它,聲明它if序列,只是分配的區塊內,是這樣的:

double Q = 0.0; 
if(comboBox1->Text=="bbl/D (BPD)") { 
    Q = nQ; 
} else if(comboBox1->Text=="scf/D (SCFPD)") { 
    Q = nQ * 11; 
} else if(comboBox1->Text=="m^3/D (CUMPD)") { 
    Q = nQ * 11; 
} 
// Now you can use Q. 

另外要注意的是,如果你的語言是C(你在當前問題中沒有指定它),比較字符串應該用strcmp系列,而不是==。如:

if (strcmp (comboBox1->Text, "bbl/D (BPD)") == 0) 

如果用我給你Q不從初始值改變的代碼中找到,這是最有可能的原因。

+0

Q在if鏈中沒有改變,當我這樣做!在鏈的末尾它將是零。 – mojtaba

+0

@mojtaba,如果Q不變,那麼沒有一個條件得到滿足。如果這是C,那是因爲你使用'=='而不是'strcmp'。更新答案。 – paxdiablo

+0

我檢查中斷點。如果限制爲真,如果body將運行但Q不會改變。因爲你建議我會通過strcmp來檢查它。 – mojtaba