gpt4 book ai didi

CPP 文件中的 C++11 模板定义, undefined reference

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:26 28 4
gpt4 key购买 nike

我发现了一些 C++11 特性,但遇到了问题。我有一个成员函数 'call'

class cscript
{
public:
template <typename ret_t, typename... params>
bool call(ret_t &ret, const char * name, params... parameters);
....

实现:

template <typename ret_t, typename... params>
bool cscript::call(ret_t &ret, const char * name, params... parameters)
{
ret_t (*func)(params...);
func = (decltype(func)) tcc_get_symbol(tcc, name);
if (!func)
return true;

ret = func(parameters...);

return false;
}

链接时出现如下错误:

obj\Release\main.o:main.cpp:(.text.startup+0xcc)||undefined reference to `bool cscript::call<int, int, int>(int&, char const*, int, int)'|

调用示例:

script.call(ret, "sum", 2, 3);

关于如何使这项工作有什么建议吗?

最佳答案

从外观上看,模板定义在使用时是不可见的。也就是说,编译器在看到 cscript::call() 的实现时不知道需要传递哪些模板参数,也不知道在使用时该实现是什么样子。您有两个基本选择:

  1. cscript::call() 的定义放在 header 中,以便在使用时始终可见。
  2. 显式实例化您正在使用的 `csscript::call() 版本。

后者看起来像下面这样,在实现文件中定义之后的某处:

template bool cscript::call<int, int, int>(int&, char const*, int, int);

从表面上看,您想使用此模板的多个不同版本,并且您可能不想重复这些内容。因此,您可能希望将定义放入标题中。

关于CPP 文件中的 C++11 模板定义, undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12046846/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com