![](/img/trans.png)
[英]No matching function for call to 'merge(std::vector<int>&, std::vector<int>&)
[英]No matching function for call to 'std::vector<int>::insert' when using a macro
我編寫了對向量執行一些操作的代碼,其中定義了一個宏:
#define all(c) ((c).begin(),(c).end())
...並使用v2.insert(1, all(v1))
將該宏用於矢量插入。
這意味着,我要插入的矢量的所有元素v1
在載體第二位置v2
。 但是,在insert
函數調用的行上出現以下錯誤:
沒有匹配的函數來調用'std :: vector :: insert ...
代碼如下:
#include<iostream>
#include<stdio.h>
#include<vector>
#include<stdlib.h>
#define all(c) ((c).begin(),(c).end())
using namespace std;
int main()
{
int data[]={1,2,3,4,5,6,7,8};
vector<int> v1(data+1,data+5);
vector<int> v2(2,1);
v2.insert(1,all(v1));
printf("\n Before the for loop");
for(vector<int> v2::iterator it=v2.begin();it!=v2.end();it++)
{
printf("\t %d \t ",*it++);
}
return 0;
}
由於有了這個宏,您有了v2.insert(1,((v1).begin(),(v1).end()))
和內部((v1).begin(),(v1).end())
使用內置的逗號運算符代替參數分隔符。 這意味着您真正在做什么是v2.insert(1,((v1).end()))
我建議您不要使用宏來“縮短”這樣的事情。 除了產生像您一樣的問題外,它還會使代碼更難以閱讀,理解和維護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.