簡體   English   中英

如何用鏈 inheritance c++ 解決這個問題?

[英]How can I solve this problem with chain inheritance c++?

基本上我正在我的大學里研究Chain Inheritance,我希望用這個來構建一個程序,我遇到的問題是這部分:

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 執行它時以完全相同的方式調用它。

template <class NUM_TYPE>
class FilterPositiveNumber: public Filtro<NUM_TYPE>
{
...
};

定義了一個 class 模板,一個潛在的類族的藍圖。 要使用它,您必須告訴編譯器,或者編譯器必須能夠推斷,模板要專門用於什么類型才能成為 class。

class FilterNaturalString: public Filtro<std::string> 
{
...
};

定義了一個 class。

所以

new_check = new FilterNaturalString;

有效但

new_check = new FilterPositiveNumber<int>;

需要允許編譯器填充空白並創建可以從模板實例化的 class。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM