在主要的测试文件中,我开始使用与此类似的代码。
//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语句中声明不同类型的相同变量?
我试图这样做以避免在输入循环中进行额外的测试,这样就可以对数据类型进行一次检查,定义正确的数据类型并且代码将比它具有的更短是。任何想法发生了什么?
编辑:已添加代码。
答案 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语句
之前声明变量