【发布时间】:2022-01-22 04:02:21
【问题描述】:
这是我的代码:
Extractor.hpp
template <class O, class D> class Extractor{
public:
Extractor(
std::vector<O>& input_data,
Filtro<O>& filtro,
Mapeador<O, D>& mapeador
): _input_data(input_data), _filtro(filtro), _mapeador(mapeador) {}
unsigned int getData(std::vector<D>& output) {
unsigned total = 0;
for (O& data: _input_data) {
if (_filtro.dadoValido(data)) {
output.push_back(_mapeador.transformaDado(data));
total++;
}
}
return total;
}
private:
std::vector<O>& _input_data;
Filtro<O>& _filtro;
Mapeador<O, D>& _mapeador;
};
Extractor.cpp
template <class NUM_TYPE>
class Num2Sqrt: public Mapeador<NUM_TYPE, NUM_TYPE> {
...
}
};
class FiltroNumPositivo: public Filtro<NUM_TYPE> {
bool dadoValido(NUM_TYPE& d) const override {
...
}
};
template <class NUM_TYPE> void test_filter_square_roots() {
...
Extractor<Filtro<int>,Mapeador<std::string, int>> new_extrator(new_filtro, new_mapeador, saida);
我只是截取了一小部分代码让大家能够看懂,但是我的问题是声明了名为Extractor的模板的类,看看扩展的错误报告(我截取了一小部分错误) :
ExtratorDeDados.cpp:在“void test_filter_square_roots() [with NUM_TYPE = int]”的实例化中: ExtratorDeDados.cpp:329:37:从这里需要 ExtratorDeDados.cpp:243:61: 错误: 没有匹配函数调用 'ExtratorDeDados
Mapeadorstd::__cxx11::basic_string >::ExtratorDeDados(Filtro&, Mapeador int> &, std::vector<:__cxx11::basic_string int> >&)' ExtratorDeDados> new_extrator(new_filtro, new_mapeador, >saida); ^~~~~~~~~~~~ 在 ExtratorDeDados.cpp:3:0 包含的文件中: ExtratorDeDados.hpp:124:5:注意:候选:ExtratorDeDados ::ExtratorDeDados(std::vector&, >Filtro&, Mapeador &) [with O = Filtro; D = Mapeadorstd::__cxx11::basic_string int>] ExtratorDeDados( ^~~~~~~~~~~~~~~ ExtratorDeDados.hpp:124:5: 注意:没有已知的参数 1 从‘Filtro’到>‘std::vector >&’的转换 ExtratorDeDados.hpp:113:35: 注意: 候选: constexpr ExtratorDeDados &, MapeadorMapeadorstd::__cxx11::basic_string >::ExtratorDeDados(const >ExtratorDeDados >&) 模板 class ExtratorDeDados { ^~~~~~~~~~~~~~~ ExtratorDeDados.hpp:113:35:注意:候选人需要 1 个参数,提供 3 个参数 ExtratorDeDados.hpp:113:35: 注意: 候选: constexpr ExtratorDeDados Mapeadorstd::__cxx11::basic_string >::ExtratorDeDados(ExtratorDeDados Mapeadorstd::__cxx11::basic_string >&&) ExtratorDeDados.hpp:113:35:注意:候选人需要 1 个参数,提供 3 个参数 ExtratorDeDados.cpp:在“void test_filter_square_roots() [with NUM_TYPE = double]”的实例化中: ExtratorDeDados.cpp:332:40:从这里需要 ExtratorDeDados.cpp:243:61: 错误: 没有匹配函数调用 'ExtratorDeDados Mapeadorstd::__cxx11::basic_string >::ExtratorDeDados(Filtro int>&, std::vector<:__cxx11::basic_string int> >&)' ExtratorDeDados > new_extrator(new_filtro, new_mapeador, >saida); ^~~~~~~~~~~~ 在 ExtratorDeDados.cpp:3:0 包含的文件中: ExtratorDeDados.hpp:124:5:注意:候选:ExtratorDeDados ’到>‘std::vector::ExtratorDeDados(std::vector&, >Filtro&, Mapeador &) [with O = Filtro; D = Mapeadorstd::__cxx11::basic_string int>] ExtratorDeDados( ^~~~~~~~~~~~~~~ ExtratorDeDados.hpp:124:5: 注意:没有已知的参数 1 从‘Filtro >&’的转换 ExtratorDeDados.hpp:113:35: 注意: 候选: constexpr ExtratorDeDados
【问题讨论】:
标签: c++ oop c++11 inheritance multiple-inheritance