2013-06-13 60 views
1

類型的無效初始化我以爲我可以創建和填充一個C++的地圖是這樣的:錯誤:類型...的非const引用從臨時

39 int main(){ 
40 
41 cout << "Approximate travelling salesman path finder." << endl; 
42 cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl << endl; 
43 
44 map<City, OtherCities> database; 
45 ReadInData(&database); 
46 ... 
47 } 

作爲一個側面說明,ReadInData功能只需要一個map<City, OtherCities>引用作爲參數,其中City只是字符串(城市的名稱)的typedef,而OtherCities是包含表示其他城市及其與第一個城市距離的(string,int)對的優先級隊列。

總之,試圖編譯這將導致以下錯誤:

pr3.cpp: In function ‘int main()’: 
pr3.cpp:45: error: invalid initialization of non-const reference of type ‘std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::priority_queue<OtherCity, std::vector<OtherCity, std::allocator<OtherCity> >, std::greater<OtherCity> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::priority_queue<OtherCity, std::vector<OtherCity, std::allocator<OtherCity> >, std::greater<OtherCity> > > > >&’ from a temporary of type ‘std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::priority_queue<OtherCity, std::vector<OtherCity, std::allocator<OtherCity> >, std::greater<OtherCity> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::priority_queue<OtherCity, std::vector<OtherCity, std::allocator<OtherCity> >, std::greater<OtherCity> > > > >*’ 

我在做什麼錯在這裏,和(除了使用禁忌全局變量),有另一種很好的方式,以保持該database在主函數中並在其他地方填充/使用它?我不想只是按值傳遞的一個副本...

+2

'database'是**不是** _uninitialized變量_。假設'map'是指'std :: map',它有一個默認的構造函數,'database'是_default construct_。 –

+0

@ K-ballo:編輯。感謝您指出了這一點! :-) – nicole

回答

4

如果函數需要一個參考,你應該通過database,不&database後者是地址database,所以這是一個指針,不是一個參考。

+0

OHH ...哎呀。我可以在8分鐘內獲得最佳答案複選標記......哈哈。 – nicole

1

你所說的那樣,ReadInData()是這樣的:

ReadInData(map<City, OtherCities>& param) 
//        ^
//       NOTICE THIS 

它通過參考需要param。因此,你應該做的:

map<City, OtherCities> database; 
ReadInData(database); 
//  ^
//  BYE-BYE & 

,而不是ReadInData(&database);因爲,你實際上是傳遞地址databaseReadInData(),這不是什麼ReadInData()需求。

相關問題