Ошибка вызова функции-члена g ++: нет соответствующей функции для вызова

g ++ обнаружил ошибку в этом образце.

У меня есть класс Option которые содержат std::string

OptionValue унаследованный от Option с типом шаблона и шаблонным аргументом типа std::string за ключ.

OptionManager управлять OptionValue в std::map<std::string, Option*>
OptionManager иметь функцию-член create :

  template <typename T, std::string & key>
void  create(const T & value);

g ++ не жалуйся, если я не призываю:

  OptionManager *manager = new OptionManager;
manager->create<int, "my_key">(3);

g ++ не нравится create позвоните, вот ошибка:
no matching function for call to OptionManager::create(int)

Если кто-то может помочь мне, показывая мне путь, я очень благодарен ему !!! 🙂

Вот код:

Option.hpp

class                                   Option
{
public:
Option(std::string & key) :
key_(key)
{}

virtual ~Option()
{}

protected:
std::string                           key_;
};

OptionValue.hpp

template                                <typename T, std::string & key>
class                                   OptionValue : public Option
{
public:
OptionValue<T, key>(T val) :
Option(key),
val_(val)
{}

virtual ~OptionValue()
{}

private:
T                                     val_;
};

OptionManager.hpp

class                                   OptionManager
{
public:
OptionManager(){}
~OptionManager(){}
template                              <typename T, std::string & key>
void                                  create(const T & value)
{
Option                              *tmp;

tmp = new OptionValue<T, key>(value);
this->list_.insert(t_pair(key, tmp));
}
private:
std::map<std::string, Option*>                        list_;
typedef std::map<std::string, Option*>::iterator      t_iter;
typedef std::pair<std::string, Option*>               t_pair;

};

main.cpp

int                             main()
{
OptionManager                 *manager;

manager = new OptionManager;
manager->create<int, "my_key">(3);
return 0;
}

ошибка g ++

main.cpp: In function ‘int main()’:
main.cpp:8:35: error: no matching function for call to ‘OptionManager::create(int)’
main.cpp:8:35: note: candidate is:
OptionManager.hpp:14:12: note: template<class T, std::string& key> void OptionManager::create(const T&)

0

Решение

Ваш второй параметр шаблона имеет тип std::string &, Вы не можете инициализировать это с временным объектом (как, в вашем случае, тот, который создан путем преобразования строкового литерала в std::string).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]