矢量模板 - '不匹配呼叫'错误

时间:2012-10-23 02:07:19

标签: c++ templates vector

我试图在我的代码中使用模板和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;)'

1 个答案:

答案 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());