gpt4 book ai didi

c++ - 模板化成员函数调用g++错误: no matching function for call

转载 作者:行者123 更新时间:2023-11-28 07:38:49 26 4
gpt4 key购买 nike

g++ 在该样本上遇到错误。

我有一个类Option谁包含 std::string

OptionValue继承自 Option具有模板类型和类型为 std::string 的模板化参数为 key 。

OptionManager管理OptionValuestd::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)

如果有人能帮我指路,我非常感谢他!!! :)

代码如下:

选项.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&)

最佳答案

您的第二个模板参数是 std::string & 类型。您不能使用临时对象初始化它(在您的情况下,通过将字符串文字转换为 std::string 创建的对象)。

关于c++ - 模板化成员函数调用g++错误: no matching function for call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com