在我的标题中,我得到了一个外部库模板的typedef以及类似的函数:
#include "ExternalFancyLib.h"
class Fancy
{
public:
//...
typedef FancyClass<int , 3> FancyClassType;
FancyClassType::Pointer FancyFunction ();
}
在我的* .cpp文件中,我得到了:
#include "Fancy.h"
FancyClassType::Pointer Fancy::FancyFunction()
{
// do and return smth.
}
我永远友好的编译器告诉我&#34; ::&#34;必须后跟一个类或命名空间,引用FancyClassType。
有任何想法以优雅来解决这个问题吗?
干杯使用
答案 0 :(得分:1)
FancyClassType
在您的Fancy
课程中定义,因此您也必须指定:
Fancy::FancyClassType::Pointer Fancy::FancyFunction(){}
使用当前范围查找 FancyClassType::Pointer
。在您的类定义中,这包括Fancy
中的定义。在您的Cpp文件中,名称在全局范围内解析,因此它将呈现::FancyClassType::Pointer
(忽略名称空间)。这没有定义。
答案 1 :(得分:0)
我强烈认为您的FancyClassType
需要代替FancyClass<int , 3>
,您需要在使用Fancy::
时引用typedef
cpp文件中的代码应如下所示:
#include "Fancy.h"
Fancy::FancyClassType::Pointer Fancy::FancyFunction (){
// do and return smth
}
否则你实际上并没有调用你所做的typedef
。
我能想到的另一种方法是将::Pointer
添加到您只需要致电的typedef
Fancy::FancyClassType Fancy::FancyFunction (){
// do and return smth
}
这是我能想到的最好的......希望有所帮助