我试图在我的代码中使用模板和vector,方法如下:
在我的标题文件中:
template <typename V>
void changeConfig(char option, vector <V> & arg_in){
// ....
}
在源文件中:
vector <int> p = {4};
changeConfig('w' ,p);
这就是我得到的错误:
/include/config.h:在成员函数'void Cfconfig :: changeConfig(char,std :: vector&lt; _RealType&gt;&amp;)[with V = int]':
src / config_test.cpp:10:38:从这里实例化
/include/config.h:68:25:错误:无法调用'(int_vector {aka std :: vector})(std :: vector&amp;)'
make:*** [featureconfig_test.o_dbg]错误1
我在这个帖子上尝试过这些建议,但似乎都没有。
C++ Templates Error: no matching function for call
任何帮助将不胜感激。感谢。
好的,我写了一段我的代码,它给出了同样的错误:
#include <iostream>
#include <stdio.h>
#include <stdarg.h>
#include <cstdio>
#include <opencv2/opencv.hpp>
#include <string.h>
#include <math.h>
#include <complex.h>
#include <dirent.h>
#include <fstream>
#include <typeinfo>
#include <unistd.h>
#include <stdlib.h>
#include <algorithm>
#include <array>
#include <initializer_list>
#include <vector>
#include <algorithm>
using namespace std;
template <typename V>
void changeConfig(char option, vector <V> & arg_in){
vector<int> window = {5};
vector<double> scale = {3};
switch(option){
case 'w':
window(arg_in);
break;
case 's':
scale(arg_in);
break;
}
}
int main(){
vector <int> p = {3};
changeConfig<int>('w', p);
return 0;
}
我编译使用: g ++ -std = c ++ 0x test_template.cpp -o test
给了我这个错误:
test_template.cpp:在函数'void changeConfig(char,std :: vector&lt; _RealType&gt;&amp;)[with V = int]':
test_template.cpp:45:33:从这里实例化
test_template.cpp:32:33:错误:无法匹配调用'(std :: vector)(std :: vector&amp;)'
test_template.cpp:35:33:错误:无法调用'(std :: vector)(std :: vector&amp;)'
答案 0 :(得分:2)
问题在于window(arg_in);
和scale(arg_in);
。您试图将std::vector
调用为另一个std::vector
作为参数的函数。我想你正在尝试将一个向量分配给另一个向量,所以只需使用赋值或swap
。
vector<int> window = {5};
vector<int> scale = {3}; // Note I changed this from double to int
switch(option){
case 'w':
window = arg_in; // Perhaps you meant arg_in = window
break;
case 's':
scale = arg_in; // Perhaps you meant arg_in = scale
break;
}
}
如果您想使用vector<double> scale
,请使用scale.assign(arg_in.begin(), arg_in.end());
代替arg_in.assign(scale.begin(), scale.end());
。