簡體   English   中英

模板化的成員函數調用g ++錯誤:沒有匹配的調用函數

[英]Templated member function call g++ error : no matching function for call

g ++在該示例上遇到錯誤。

我有一個包含std::string的類Option

Option繼承的OptionValue ,具有模板類型和密鑰的std::string類型的模板化參數。

OptionManagerstd::map<std::string, Option*>管理OptionValueOptionManager具有成員函數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&)

您的第二個模板參數的類型為std::string & 您不能使用一個臨時對象(例如,通過將字符串文字轉換為std::string創建的對象)初始化該對象。

暫無
暫無

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

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