簡體   English   中英

錯誤:變量未在此范圍內聲明

[英]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包含intdoubleany

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM