gpt4 book ai didi

c++ - 函数模板链接错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:16 25 4
gpt4 key购买 nike

我创建了一个函数模板,允许我获取任何数据类型的数据,但在编译时收到错误消息:

Undefined symbols for architecture i386:
"bool Json::getData<double>(double, Json&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DataType)", referenced from:
Coupon::initCoupon(int const&, Json&)in libkuapay.a(Coupon.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
scons: *** [kuaposgw] Error 1
scons: building terminated because of errors.

函数声明为:

 template < class T> static bool getData(T data, Json &jsonObject, const string &key, DataType dataType);

并称为:

 Json::getData (couponList[cpnCnt].discount, couponReader, "discount", realType);

其中 couponList[cpnCnt].discount 是双数。

代码本身在我的“内部”目录中编译得很好,但我在“外部”目录,后者本质上是内部代码的包装器。

最佳答案

模板的当前状态通常要求函数定义就在函数声明的位置。

根据模板的工作方式,编译器基本上会为模板参数的每个变体生成一个自定义版本的函数。由于编译器无法预先知道所有这些不同的模板参数是什么(它是 int 还是 double 或在其他文件中声明的某种未知类型? ) 在调用该函数之前,它无法创建这些版本。

这意味着当您调用函数时,整个函数定义必须可供编译器使用。为了实现这一点,您应该将函数定义放在标题中。

还有其他方法可以做到这一点。类模板的显式实例化。没有函数模板参数的重载声明。但一般来说,您的整个模板定义必须在头文件中。

关于c++ - 函数模板链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647962/

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