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:3​​8:ここからインスタンス化

/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-otestを使用してコンパイルしました

これは私にこのエラーを与えました:

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引数として別の関数を使用してlike関数を呼び出そうとし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> scalescale.assign(arg_in.begin(), arg_in.end());くださいarg_in.assign(scale.begin(), scale.end());

于 2012-10-23T02:09:25.327 に答える