由于使用unsigned int,在可变参数模板c ++上未解决的外部符号错误

问题描述 投票:0回答:1

我已经使用可变参数模板声明了一个简单的函数。

template<typename ...Args>
void Log(const LogLevel level, const char * format, Args ...args);

在以下列方式调用它 -

Log(LogLevel::debug,
        R"(starting x, %d pending call for "%s" with param "%s")",
        id, first.c_str(),
       second.c_str())

其中变量类型为:idunsigned int),firststd::string),secondstd::string

我收到以下错误:

Error   LNK2001 unresolved external symbol "public: void __cdecl Log<unsigned int,char const *,char const *>(enum LogLevel,char const *,unsigned int,char const *,char const *)" 

当我从函数调用中删除unsigned int参数时 - 错误消失。 AFAIK可变参数模板支持不同的类型......所以我缺少什么?

c++ c++11 templates variadic-templates
1个回答
2
投票

这是一个链接器错误,所以(我想)你已经在头文件中声明了模板函数,并在c ++(不是头文件)文件中定义了它。

如果使用在不同c ++文件中接收unsigned int的模板函数,则编译器不知道要实现哪个版本的函数。

简单的解决方案:在头文件中声明和定义模板函数/ classes / structs。

如果我错了......请准备一个最小的例子来复制错误。

© www.soinside.com 2019 - 2024. All rights reserved.