Ошибка функции-члена при использовании класса шаблона в качестве значения в std :: map - PullRequest
0 голосов
/ 30 марта 2020
#include <iostream>
#include <string>
#include <typeinfo>
#include <memory>
#include <map>

class IVariantClass{
public:
  ~IVariantClass(){};
};

template<typename Type>
class VariantClass: public IVariantClass {
public:
  VariantClass(const Type& var):  var_{var}{}
  Type& GetVar() { return var_;}
private:
  Type var_;
};


int main() {
    std::map<int, double> var;

    std::map<std::string , std::shared_ptr<IVariantClass>> args_value;
    int x = 10;
    double y = 10.22;
    std::string str = "string";

    args_value["val1"] = std::make_shared<VariantClass<decltype(x)>>(x);
    args_value["val2"] = std::make_shared<VariantClass<decltype(y)>>(y);
    args_value["val3"] = std::make_shared<VariantClass<decltype(str)>>(str); 

    for (typename std::map<std::string , std::shared_ptr<IVariantClass>>::iterator it = args_value.begin(); it!=args_value.end(); ++it) { 
        std::cout << it->first << " " << it->second->GetVar() << "\n" ;
    }
    return 0;
}

: В функции 'int main ()':

: 36: 54: ошибка: 'using element_type = class IVariantClass' {aka 'class IVariantClass'} не имеет члена с именем 'GetVar'

36 | std :: cout << it-> first << "" << it-> second-> GetVar () << "\ n"; </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...