未定义的make_unique引用(我的定义)

时间:2014-09-23 13:28:31

标签: c++ c++11

我已按照this question/answer中的说明操作,并创建了一个模板类:

// ConfigItems.hpp
#pragma once    
#include <memory>
#include <string>

template< typename T > class ConfigItem : public IConfigItem // here IConfigItem is the class that has the virtual members
{
private:
    T m_value;

public:
    ConfigItem< T >(const T& valueIn = 0);

    std::ostream &printTo(std::ostream &outIn) const;
    operator T() const;
};

template< typename T, typename ...Args > std::unique_ptr< T > make_unique(Args&& ...args);

实施在这里:

// ConfigItems.cpp
#include "ConfigItems.hpp"

template< typename T > ConfigItem< T >::ConfigItem(const T& valueIn) : m_value(valueIn) {}

template< typename T > ConfigItem< T >::operator T() const
{
    return m_value;
}

template< typename T > std::ostream& ConfigItem< T >::printTo(std::ostream& outIn) const
{
    return outIn << m_value;
}
template< typename T, typename ...Args > std::unique_ptr< T > make_unique(Args&& ...args)
{
    return std::unique_ptr< T >(new T(std::forward< Args >(args)...));
}

我创建了一个ConfigFile类:

// ConfigFile.hpp
#pragma once
class ConfigFile
{
private:
    static const std::string sm_inputFolderPath;

    std::map<std::string, std::unique_ptr< IConfigItem > > m_configMap;

public:
    ConfigFile(const std::string& nameIn);
    ~ConfigFile();

};

实现:

// ConfigFile.cpp
#include "ConfigFile.hpp"

const std::string ConfigFile::sm_inputFolderPath = "input_folder_path";

ConfigFile::ConfigFile(const std::string& nameIn)
{
    PTree tmpPT;
    json::read_json(nameIn, tmpPT);

    m_configMap.emplace(
        ConfigFile::sm_inputFolderPath,
        make_unique< ConfigItem< std::string > >(tmpPT.get< std::string >(ConfigFile::sm_inputFolderPath))); // here I get the error
}

我收到链接错误(未编译):

undefined reference to `std::unique_ptr<ConfigItem<std::string>, std::default_delete<ConfigItem<std::string> > > make_unique<ConfigItem<std::string>, std::string>(std::string&&)'

我不确定这里有什么问题。我正在使用c ++ 11,这就是为什么我添加了make_unique的功能。任何人都可以帮我解决这个问题吗?我做错了什么?

0 个答案:

没有答案