基本上我正在我的大學學習鏈繼承,我希望用這個來構建一個程式,我遇到的問題是在這部分:
template <class NUM_TYPE>
class FilterPositiveNumber: public Filtro<NUM_TYPE> {
bool dadoValido(NUM_TYPE& d) const override {
// TODO: Implemente este metodo.
if (d > 0){
return true;
}else{
return false;
}
}
};
class FilterNaturalString: public Filtro<std::string> {
bool dadoValido(std::string& d) const override {
std::string::const_iterator it = d.begin();
while (it != d.end() && std::isdigit(*it)) it;
return !d.empty() && it == d.end();
}
};
void convert2int(std::vector<std::string>& in, std::vector<int>& out) {
Filtro<std::string>* new_check;
new_check = new FilterNaturalString;
for(std::string i : in){
if(new_check->dadoValido(i)){
out.push_back(stoi(i));
}
}
}
template <class NUM_TYPE> void test_filter_square_roots() {
std::vector<unsigned> entrada;
std::vector<unsigned> saida;
read_input(entrada);
Filtro<int>* new_check;
new_check = new FilterPositiveNumber;
}
我收到這個錯誤
error: invalid use of template-name ‘FilterPositiveNumber’ without an argument list
new_check = new FilterPositiveNumber;
我不明白為什么我在第二次嘗試實體化“Filtro”時遇到錯誤,如果我在對 FilterNaturalString 執行它時以完全相同的方式呼叫它。
uj5u.com熱心網友回復:
template <class NUM_TYPE>
class FilterPositiveNumber: public Filtro<NUM_TYPE>
{
...
};
定義了一個類模板,一個潛在的類族的藍圖。要使用它,您必須告訴編譯器,或者編譯器必須能夠推斷出模板要專門化以成為類的型別。
class FilterNaturalString: public Filtro<std::string>
{
...
};
定義一個類。
所以
new_check = new FilterNaturalString;
有效但
new_check = new FilterPositiveNumber<int>;
需要允許編譯器填充空白并創建可以從模板實體化的類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/418574.html
標籤:
上一篇:在C 中重新啟動回圈?
下一篇:Haskell:準引號轉義
