[英]Error: Variable Not declared in this scope
在用於測試的主文件中,我從與此類似的代碼開始。
//Initialize the data type for the vectors and input variables
if ( choice == 1 )
{
vector<int>MyVector{};
vector<int>NewVect{};
int k1{}, k2{};
}
else if ( choice == 2 )
{
vector<float>MyVector{};
vector<float>NewVect{};
float k1{}, k2{};
}
//Exact Same block for double
while ( true )
{
cout<<": ";
cin>>k1>>k2;
if ((k1 == 0 ) && (k2 == 0)) break;
else
{
MyVector.push_back(k1);
MyVector.push_back(k2);
continue;
}
}
//Insert Sort Algorithm test, Imported from class InsertSort.
//NewVector = sort.sort(MyVector)
return 0;
}
它繼續這樣進入另外兩個分別聲明 float 和 double 的 else if 語句(使用相同的變量名)。 然而,編譯停止並說 k1、k2、MyVector 和 NewVector 未在此范圍內進一步聲明到程序中。 我在 main 的“全局”部分聲明了它,所以我不太明白為什么聲明沒有發生。 是否不能嘗試在 if/else if 語句中聲明不同類型的相同變量?
我試圖這樣做是為了避免在輸入循環中進行額外的測試,這樣就對數據類型進行了一次檢查,定義了正確的數據類型,並且代碼將比原來更短。 任何想法發生了什么?
編輯:添加了代碼。
您不能聲明類型取決於運行時條件的變量。 變量類型在編譯時聲明/指定。 知道這一點,您嘗試在 if 塊中聲明不同的類型,但是,每個變量的范圍僅限於聲明它的塊。
您正在嘗試的內容可以使用某種多態變量或任何類型的變量來實現,這些變量將在C++17
可用,但在之前不可用,名稱為std::any
。 同時,您可以嘗試使用unions
為自己制作類似的東西。 下面可以提供一個起始示例來創建您自己的any
類型,該示例定義了any
包含int
或double
的any
:
#include <iostream>
#include <vector>
struct any {
union { int intVal = 0; double dblVal;};
enum {Int = 1, Dbl = 2} type = Int;
any(int val) : intVal(val) {type = Int;}
any(double val) : dblVal(val) {type = Dbl;}
any() {}
};
std::ostream& operator <<(std::ostream& os, const any& x) {
switch(x.type) {
case any::Int : os << x.intVal; break;
case any::Dbl : os << x.dblVal; break;
}
return os;
}
int main()
{
std::vector<any> vect;
any k1, k2;
vect.emplace_back(3);
vect.emplace_back(4);
vect.emplace_back(9.5);
vect.emplace_back(10.5);
for (const auto& i: vect)
std::cout << i << " ";
}
看起來變量只在if
語句中定義。 如果要在if
語句結束后使用這些變量, if
需要在if
語句之前聲明它們。
嘗試將 k1 和 k2 排除在 if 條件之外
int k1{}, k2{};
if ( choice == 1 )
{
vector<int>Myvector{};
vector<int>NewVect{};
}
總是嘗試在 if 語句之前聲明變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.