错误:变量未在此范围内声明

时间:2017-02-07 05:01:57

标签: c++ compiler-errors

在主要的测试文件中,我开始使用与此类似的代码。

 //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;    
}

它继续像这样继续另外两个if语句分别声明float和double(使用相同的变量名)。然而,编译停止并表示k1,k2,MyVector和NewVector未在此范围内进一步声明到程序中。我在&#34;全球&#34;主要部分,所以我并不真正理解为什么宣言没有发生。是否不可能尝试在if / else if语句中声明不同类型的相同变量?

我试图这样做以避免在输入循环中进行额外的测试,这样就可以对数据类型进行一次检查,定义正确的数据类型并且代码将比它具有的更短是。任何想法发生了什么?

编辑:已添加代码。

3 个答案:

答案 0 :(得分:1)

您不能声明一个类型取决于运行时条件的变量。在编译时声明/指定变量的类型。知道了,你试图在if blocs中声明不同的类型,但是,每个变量的范围仅限于声明它的bloc。

您正在尝试使用某种多态变量任何类型的变量来实现,这些变量将在unions中提供,但不会在之前,名称为any。与此同时,您可以尝试使用any为自己做类似的事情。以下内容可以提供制作您自己的int类型的开始示例,该示例定义了一个double,其中包含#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 << " "; } 或{{1}}:

{{1}}

答案 1 :(得分:0)

看起来变量只在if语句中定义。 如果要在if语句结束后使用这些变量,则需要在if语句之前声明它们。

答案 2 :(得分:0)

尝试将k1和k2置于if条件

之外
int k1{}, k2{};
if ( choice == 1 ) 
{
 vector<int>Myvector{};
 vector<int>NewVect{};
}    

总是尝试在if语句

之前声明变量