你能帮我做空中接力吗

Can you help me with oop?

本文关键字:      更新时间:2024-09-23

这是我的代码:

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<Filtro,>Mapeadorstd::__cxx11::basic_string<char,int>gt;:ExtratorDeDados(Filtro&,Mapeador<int,>int>&aamp;,std::vector<Mapeadorstd::__cxx11::basic_string<char,int&gtExtratorDeDados&lt;Filtro,Mapeador<std::string,int>gt;new_extractor(new_filtro、new_mapeador、>saida(;^~~~~~~~~~~~在ExtratorDeDados.cpp:3:0:ExtratorDeDados。hpp:124:5:注:候选人:ExtratorDeDados<O、 D>:ExtratorDeDados(std::vector&,>Filtro&、Mapeador<O,D>&([其中O=Filtro;D=Mapeadorstd::__cxx11::basic_string<char,>int>]ExtratorDeDados(^~~~~~~~~~~~~~~ExtratorDeDados.hpp:124:5:注意:参数1从"Filtro"到">"没有已知的转换std::vector<Filtro,std::分配器<Filtro>gt&'ExtratorDeDados。hpp:113:35:注意:候选者:constexpr ExtratorDeDados<Filtro,>Mapeadorstd::__cxx11::basic_string<char,int>gt;:ExtratorDeDados(const>ExtratorDeDados<Filtro,Mapeadorstd::__cxx11::basic_string<char,int>>(模板<类O、类D>类别ExtratorDeDados{^~~~~~~~~~~~~~~ExtratorDeDados。hpp:113:35:注意:候选人需要1个论点,提供3个ExtratorDeDados。hpp:113:35:注意:候选者:constexpr ExtratorDeDados<Filtro,>Mapeadorstd::__cxx11::basic_string<char,int>gt;:ExtratorDeDados(ExtratorDeDados<Filtro,>Mapeadorstd::__cxx11::basic_string<char,int>>&(ExtratorDeDados。hpp:113:35:注意:候选人需要1个论点,提供3个ExtratorDeDados.cpp:在"void test_filter_square_roots(([带NUM_TYPE=double]"的实例化中:ExtratorDeDados.cpp:332:40:从这里开始需要ExtratorDeDados.cpp:243:61:错误:没有匹配的函数可用于调用"ExtratorDeDados<Filtro,>Mapeadorstd::__cxx11::basic_string<char,int>gt;:ExtratorDeDados(Filtro&,Mapeador<int,>int>&aamp;,std::vector<Mapeadorstd::__cxx11::basic_string<char,int>&('ExtratorDeDados<Filtro,Mapeador<std::string,int>gt;new_extractor(new_filtro、new_mapeador、>saida(;^~~~~~~~~~~~在ExtratorDeDados.cpp:3:0:ExtratorDeDados。hpp:124:5:注:候选人:ExtratorDeDados<O、 D>:ExtratorDeDados(std::vector&,>Filtro&、Mapeador<O,D>&([其中O=Filtro;D=Mapeadorstd::__cxx11::basic_string<char,>int>]ExtratorDeDados(^~~~~~~~~~~~~~~ExtratorDeDados。hpp:124:5:注意:参数1从"Filtro"到>没有已知的转换std::vector<Filtro,std::分配器<Filtro>gt&'ExtratorDeDados。hpp:113:35:注意:候选者:constexpr ExtratorDeDados<Filtro,如果有人能帮助我,我将不胜感激!

这是您的声明:

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) {}

电话是这样的:

Extractor<Filtro<int>,Mapeador<std::string, int>> new_extrator(new_filtro, new_mapeador, saida);

因此,OFiltro<int>,而DMapeador<std::string, int>

这意味着参数必须是:

std::vector<Filtro<int>>& input_data,
Filtro<Filtro<int>>& filtro,
Mapeador<Filtro<int>, Mapeador<std::string, int>>& mapeador

但是,作为std::vector<O>,您传递的是new_filtro,它是Filtro<int>*,而不是Mapeador<O, D>,它传递的是new_mapeador,它是Mapeador<int, int>*

因此,参数与您声明的类型不匹配。

相关文章:
  • 没有找到相关文章