2017-08-02 125 views
0

。爲什麼我的編譯器不斷抱怨的映射分配我運行在Xcode這個代碼警告「C++要求所有申報類型說明符」地圖

#include <iostream> 
#include <map> 
#include <deque> 
using namespace std; 

map<int,deque<int>> bucket; 
deque<int> A{3,2,1}; 
deque<int> B; 
deque<int> C; 


bucket[1] = A;//Warning "C++ requires a type specifier for all declaration 
bucket[2] = B;//Warning "C++ requires a type specifier for all declaration 
bucket[3] = C;//Warning "C++ requires a type specifier for all declaration 

int main() { 

    for (auto it:bucket) 
    { 
     cout << it.first << "::"; 
     for (auto di = it.second.begin(); di != it.second.end(); di++) 
     { 
      cout << "=>" << *di; 
     } 
     cout << endl; 
    } 

    return 0; 
} 

在那裏,好像我做內部主同樣的事情了完美的作品

#include <iostream> 
#include <map> 
#include <deque> 
using namespace std; 

map<int,deque<int>> bucket; 
deque<int> A{3,2,1}; 
deque<int> B; 
deque<int> C; 

int main() { 

    bucket[1] = A; 
    bucket[2] = B; 
    bucket[3] = C; 

    for (auto it:bucket) 
    { 
     cout << it.first << "::"; 
     for (auto di = it.second.begin(); di != it.second.end(); di++) 
     { 
      cout << "=>" << *di; 
     } 
     cout << endl; 
    } 

    return 0; 
} 

輸出

1::=>3=>2=>1 
2:: 
3:: 
Program ended with exit code: 0 

有什麼事情,我很想念。不能夠易懂nd這種行爲。 任何建議,幫助或文檔。我看着到類似的問題,但沒有得到滿意的答案

+0

實在是可執行代碼沒有這樣的東西的功能之外的C++。 –

+0

deque A {3,2,1};爲什麼這個工作? –

+1

因爲這是一個變量的聲明。這就是「可執行代碼」的概念有點模糊的地方。全局變量的構造函數叫做,在這種情況下,它是初始化列表構造函數。 –

回答

5

同時聲明在

int i = 100; 

或設置裏面的價值你不能做這樣的事情在全球範圍內

int i; 
i = 100; 

因爲在C++ 11你要麼初始化值函數

int main() { 
i = 100; 
} 

STL初始化也是如此,這就是爲什麼你的iss UE

+0

bucket [1] = deque A {3,2,1}; 將上述工作? –

+0

@HariomSingh將'bucket'的定義移動到'deque'後面,然後您可以使用'map user4581301

1

這是因爲三線...

bucket[1] = A;//Warning "C++ requires a type specifier for all declaration 
bucket[2] = B;//Warning "C++ requires a type specifier for all declaration 
bucket[3] = C;//Warning "C++ requires a type specifier for all declaration 

的語句。你不能在C中的函數之外執行語句(C不是Python)。如果你在main()中移動這三行代碼,那麼它應該可以正常工作。

-1

編譯器能夠識別此代碼

bucket[1] = A; 
bucket[2] = B; 
bucket[3] = C; 

declarations其應具有指定的類型,因爲你不能運行可執行代碼(其調用assignment operator是)外的函數的(或作爲與初始化聲明變量時)。 在箱子:

map<int,deque<int>> bucket; 
deque<int> A{3,2,1}; 
deque<int> B; 
deque<int> C; 

map<int,deque<int>>deque<int>是類型說明符。

1

你可以做的初始化功能範圍之外的變量是

std::deque<int> A{3,2,1}; 
std::deque<int> B; 
std::deque<int> C; 
std::map<int, std::deque<int>> bucket {{1, A}, {2 , B}, {3, C}};