* .cpp文件中的Typedef Template类指针

时间:2014-07-25 11:47:57

标签: c++ templates pointers typedef

在我的标题中,我得到了一个外部库模板的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。

有任何想法以优雅来解决这个问题吗?

干杯使用

2 个答案:

答案 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
    }

这是我能想到的最好的......希望有所帮助