0

我正在尝试通过以下方式在我的代码中使用模板和向量:

在我的头文件中:

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<_RealType>&) [with V = int]'中:

src/config_test.cpp:10:38: 从这里实例化

/include/config.h:68:25: 错误:不匹配调用 '(int_vector {aka std::vector}) (std::vector&)'</p>

make: *** [featureconfig_test.o_dbg] 错误 1

我尝试了有关此线程的建议,但它们似乎都不起作用。

C++ 模板错误:没有匹配的调用函数

任何帮助,将不胜感激。谢谢。

好的,我做了一小段代码,给出了同样的错误:

#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<_RealType>&) [with V = int]'中:

test_template.cpp:45:33: 从这里实例化

test_template.cpp:32:33:错误:不匹配调用 '(std::vector) (std::vector&)'</p>

test_template.cpp:35:33: 错误:不匹配调用 '(std::vector) (std::vector&)'</p>

4

1 回答 1

2

问题在于window(arg_in);scale(arg_in);std::vector您正试图以另一个std::vector作为参数来调用类似的函数。我认为您正在尝试将一个向量分配给另一个向量,因此只需使用 assignment 或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());

于 2012-10-23T02:09:25.327 回答