This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
                                
                                    (32个答案)
                                
                        
                                5年前关闭。
            
                    
我正在尝试用C ++写一个Config类,我想要像myConfig->get<ANYTYPE>(str key, ANYTYPE default)这样的语法。我一直在玩模板,我想我已经很接近了,但是我不断收到如下错误:

// caused by config->get<bool>("fullscreen", false);
error: undefined reference to `bool const Config::get<bool>(char*, bool) const'


要么

// caused by config->get<int>("width", 800);
error: undefined reference to `int const Config::get<int>(char*, int) const'


这是上述代码行的函数声明/定义。

template<typename T>
const auto get(char* key, T def) const -> T
{
    T ret = _config[key].as<T>();

    if( ret )
        return ret;

    return def;
}


我来自PHP / Laravel背景,所以我想创建类似于Input::get("elName", "defaultValue");的东西

我必须怎么做才能使以上代码正确链接?

最佳答案

通常,模板定义在使用时必须可用。

这意味着您必须将定义本身放置在头文件中,而不是像传统上使用非模板代码那样放置在单独的源文件中。如果不这样做,则在使用该代码时将无法生成该代码,因此会出现错误。

或者,您可以在某处的源文件中explicitly instantiate一组有用的类型。

关于c++ - 如何在C++中返回变量类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26580092/

10-11 22:23
查看更多