簡體   English   中英

指針混淆導致“沒有匹配的 function 調用 std::vector”?

[英]Pointer confusion causing "no matching function call for std::vector"?

我有一個 C++ class 有一個數據成員:

private:
    std::vector<std::vector<int>> *edges;

然后在我的構造函數中,我執行以下操作:

//rows and columns are dynamically set in constructor
edges = new vector<vector<int> >(rows*columns, vector<int>());
edges[0].push_back(1);

運行我的程序時,我得到

error: no matching function for call to std::vector<std::vector<int> >::push_back(int)
          edges[0].push_back(1); 
                              ^

我只知道這與指針/引用有關,但我對 C++ 的經驗不夠,無法弄清楚,而且這個錯誤消息感覺很模糊。 有人知道這兩行有什么問題嗎?

EDIT1:我還嘗試將數據成員更改為 object (不是指針)並這樣做,但現在我的程序只是停滯不前

for (int i = 0; i < (rows*columns); i++) {
    vector<int> neighbors;
    edges.push_back(neighbors);
}

EDIT2:我也嘗試使用 paxdiablo 的答案,但現在這條線拋出了 bad_alloc

edges = new vector<vector<int> >(rows*columns, vector<int>());

這是加載二維向量的示例:

std::vector<std::vector<int>> board;
for (int row = 0; row < 4; ++row)
{
   std::vector<int> row;
   for (int column = 0; column < 4; ++column)
   {
       row.push_back((row * 4) + column);
   }
   board.push_back(row);
}

上面的代碼初始化了一個二維數組,4x4,每個槽/正方形都有一個唯一的數字。

內部循環初始化一個“行”向量。
“行”向量初始化后,“推回”到“板”向量。

edge 是一個指針,因此edges edges[0]實際上是外部向量,您不能將 append 和 integer 指向向量的向量。

你需要的是這樣的:

(*edges)[0].push_back(1);

取消引用為您提供外部向量,然后[0]為您提供第一個內部向量,您可以append 和 integer 到。

還有其他方法可以做到這一點,但這里的目的是簡單地解釋正在發生的事情。

具體來說,最好在 class 中聲明向量而不是指向向量的指針。 這樣,您可以在構建過程中自動獲得它,而不必擔心手動分配(或解除分配)它。

沒有匹配的 function 調用 'std::vector <std.. '< div><div id="text_translate"><p> 我正在解決的問題是:我必須采用<strong>T</strong>測試用例。 For each test case I have to take string as an input, then I need to arrange the input string as: <em>string at even position {double space} string at odd position</em> (example: <em>input</em> - StackOverflow, <em>output</em> - <strong>Sakvrlw</strong> <strong>tcOefo</strong> ). 我編寫了以下代碼,其中我為所有測試用例獲取輸入並將其存儲在向量中。 然后我將 vector 的元素分配給另一個聲明的 string s。</p><pre> #include &lt;cmath&gt; #include &lt;cstdio&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; using namespace std; int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int T,i; cout &lt;&lt; "Enter no. of test cases: "; cin &gt;&gt; T; vector&lt;string&gt; v; vector&lt;string&gt; odd; vector&lt;string&gt; even; string str; for(int i=0; i&lt;T; i++){ cin &gt;&gt; str; v.push_back(str); } string s; for(i=0; i&lt;v.size(); i++){ s = v.at(i); for(i=0; i&lt;s.size(); i++){ if(i==0){ even.push_back(s[i]); //*This is where I am getting error*. }else if(i==1){ odd.push_back(s[i]); }else{ if(i%2==0){ even.push_back(s[i]); }else{ odd.push_back(s[i]); } } } for(i=0; i&lt;even.size(); i++){ cout &lt;&lt; even.at(i); } cout &lt;&lt; " "; for(i=0; i&lt;odd.size(); i++){ cout &lt;&lt; odd.at(i); } cout &lt;&lt; endl; even.clear(); odd.clear(); s.clear(); } return 0; }</pre><p> 在編譯上面的代碼時,我得到"no matching error for call std::vector..." 。 <strong><em>我到底做錯了什么?</em></strong></p></div></std..>

[英]no matching function for call to 'std::vector<std.. '

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 沒有匹配的 function 調用 'std::vector <std.. '< div><div id="text_translate"><p> 我正在解決的問題是:我必須采用<strong>T</strong>測試用例。 For each test case I have to take string as an input, then I need to arrange the input string as: <em>string at even position {double space} string at odd position</em> (example: <em>input</em> - StackOverflow, <em>output</em> - <strong>Sakvrlw</strong> <strong>tcOefo</strong> ). 我編寫了以下代碼,其中我為所有測試用例獲取輸入並將其存儲在向量中。 然后我將 vector 的元素分配給另一個聲明的 string s。</p><pre> #include &lt;cmath&gt; #include &lt;cstdio&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; using namespace std; int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int T,i; cout &lt;&lt; "Enter no. of test cases: "; cin &gt;&gt; T; vector&lt;string&gt; v; vector&lt;string&gt; odd; vector&lt;string&gt; even; string str; for(int i=0; i&lt;T; i++){ cin &gt;&gt; str; v.push_back(str); } string s; for(i=0; i&lt;v.size(); i++){ s = v.at(i); for(i=0; i&lt;s.size(); i++){ if(i==0){ even.push_back(s[i]); //*This is where I am getting error*. }else if(i==1){ odd.push_back(s[i]); }else{ if(i%2==0){ even.push_back(s[i]); }else{ odd.push_back(s[i]); } } } for(i=0; i&lt;even.size(); i++){ cout &lt;&lt; even.at(i); } cout &lt;&lt; " "; for(i=0; i&lt;odd.size(); i++){ cout &lt;&lt; odd.at(i); } cout &lt;&lt; endl; even.clear(); odd.clear(); s.clear(); } return 0; }</pre><p> 在編譯上面的代碼時,我得到"no matching error for call std::vector..." 。 <strong><em>我到底做錯了什么?</em></strong></p></div></std..> 沒有匹配的函數來調用&#39;merge(std :: vector <int> &,std :: vector <int> &) 傳遞std向量作為參考:沒有匹配的函數來調用 沒有匹配的函數來調用 std::vector<float> 沒有用於調用std :: vector的匹配函數 <std::tuple> 推回 錯誤:沒有匹配的 function 調用 'recherche(std::vector &gt;&amp;, std::vector &gt;::iterator, std::vector &gt;::iterator, const char [10])' 沒有匹配的函數調用&#39;std::vector &gt;::push_back(char&amp;)&#39; C ++線程與以std :: vector為參數的函數調用不匹配 錯誤:沒有匹配的 function 調用 'std::vector::erase(int)' C ++ 11沒有匹配的函數來調用&#39;std :: vector
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM