07-06-2020, 12:14 PM
之前我遇到过一个奇怪的问题,一个函数使用的参数里面有 namespace::T 这样的类型,调用了这个函数的文件编译之后,发现符号里面 namespace:: 被扔掉了,导致了链接出错。
我当时的处理方法是把那个函数声明为 extern "C",但这个应该不适合于要重载的函数或者模板。
几天前又遇到这个问题,然后发现如果把 T 的定义从 typedef struct {...} T 改为 struct T {...},问题就解决了。
奇怪的是,我很难从头写一些这样的代码重现这个问题。
我当时的处理方法是把那个函数声明为 extern "C",但这个应该不适合于要重载的函数或者模板。
几天前又遇到这个问题,然后发现如果把 T 的定义从 typedef struct {...} T 改为 struct T {...},问题就解决了。
奇怪的是,我很难从头写一些这样的代码重现这个问题。