天天看點

C++ 程式設計中遇到的一些實際問題

1:error:“placeholders”: 具有該名稱的命名空間不存在

原因:沒有寫上包含該命名空間的頭檔案:#include<functional> 

2::error:vector subscript out of range

vector<string> vector1;//定義之後,不能直接通過下面的方式指派,這樣會導緻越界
vector[0] = "aa";
vector[1] = "bb";
           

方法一:

首先使用 tagSeq.resize(n) 語句将vector的size調整為初始

長度,然後就可以通過以上方式進行指派了。

方法二:

還有另外一種辦法,那就是vector<string> vector之後,進行調用vector的push_back("aa")方法向vector中

添加資料,該方法會自動申請記憶體,這樣vector的size就可以逐漸增加,不會越界。

推薦方法二。

3: fatal error LNK1168: 無法打開 C:\Users\Administrator\Documents\Visual Studio 2010\Projects\C++primer\Debug\C++primer.exe 進行寫入

原因:上次編譯生成的界面未關掉,關掉黑框即可

4:error:vector iterator not dereferencable

此處

vector<int> list1;	
for (it1; it1 != map1.end();++it1)//it1為首疊代器
{
	list1.push_back(it1->second);
}
vector<int>::iterator it2 = list1.begin();//定義疊疊代器一定要記得初始化!!!
cout<<*it2;
           

和:

vector<int> list1;	
vector<int>::iterator it2 = list1.begin();//定義疊疊代器一定要記得初始化!!!
for (it1; it1 != map1.end();++it1)
{
	list1.push_back(it1->second);
}
cout<<*it2;
           

兩個程式運作一下就知道,之前的vector還沒有被初始化,此時使用begin()疊代器肯定是吹出問題的。

這種問題1:越界,[begin,end),左閉合區間   2:未初始化,調用無意義  3:list等疊代器也可能會出現這種問題,一樣處理。

5:error:map/set iterator not dereferencable

原因:在使用疊代器時,遞增操作之後其指向就變了,再用就不正确了,檢視你的疊代器有沒有在循環中或别處修改過

6:error :無法從“std::_Vector_iterator<_Ty,_Alloc>”為“std::reverse_iterator<_RanIt>”

原因:疊代器未初始化就開始使用了,檢查下代碼中的疊代器定義之處是否初始化

7:error:map/set iterator not incrementable

原因:在接下來的周遊中使用了已經被釋放掉的疊代器,于是悲劇發生了

8::error C2248: “std::unique_ptr<_Ty>::unique_ptr”: 無法通路 private 成員(在“std::unique_ptr<_Ty>”類中聲明)

原因:unique_ptr不能拷貝和指派

9:error:不能将參數 1 從“const char [12]”轉換為“std::string &”

原因:注意C風格字元串和string的差別,可以用string("字元串")來解決

10:system("pause");的含義,暫停黑視窗

system() 是調用系統指令;

pause 暫停指令;

 在進行Visual Studio 下的C/C++程式設計的時候,在運作程式檢視輸出效果時,會出現視窗閃一下就關閉的情況。

在C語言中一般通過添加getchar();

在C++中一般在main函數中的return之前添加system("pause");這樣就可以看清楚輸出的結果,pause會輸出"請按任意鍵繼續. 

繼續閱讀