我一直在项目中遇到链接问题,而且我找到了一个我无法解释的解决方法。
我有这种类,我在getType<>()
上获得了一个未解析的外部符号,这是从另一个库中正确导入的。
MyClass( CustomType& iType = getType<OtherClass>() )
{...}
找到的解决方法可重用性稍差,但目前仍能很方便地满足我的用例。相同的链接器属性等。
MyClass( )
: mType( getType<OtherClass>() )
{...}
otherClass
和getType<>()
存在于不同的名称空间中?编辑: getType声明:
template<typename type>
CustomType* getType() {
static CustomType* oType = getType(typeid(type));
return oType;
}
链接错误:
MyClass.obj : error LNK2019: unresolved external symbol "public: class CustomType * __thiscall Metadata::getType<class OtherClass>(void)" ...
答案 0 :(得分:0)
默认参数仅在呼叫站点“exectuted”:因此对于
MyClass(CustomType& iType = getType<OtherClass>())
您只需要声明getType<OtherClass>()
。
仅当您使用以下内容时才会进行实例化:
MyClass myClass{}; // MyClass myClass{getType<OtherClass>()}
我认为getType<OtherClass>
的定义不可访问。
(您可能在cpp文件中实现了模板)
对于
MyClass() : mType(getType<OtherClass>()) {}
getType<OtherClass>
已实例化。