我已经使用可变参数模板声明了一个简单的函数。
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())
其中变量类型为:id
(unsigned int
),first
(std::string
),second
(std::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 ++文件中接收unsigned int
的模板函数,则编译器不知道要实现哪个版本的函数。
简单的解决方案:在头文件中声明和定义模板函数/ classes / structs。
如果我错了......请准备一个最小的例子来复制错误。