C ++,模板,静态函数

时间:2010-12-28 19:42:19

标签: c++ templates function static

我的问题再次涉及模板......来自非模板类A中的静态模板函数“functionA”

A.H

#ifndef A_H
#define A_H
#include "B.h"
class A
{
  template <class T>
  static T functionA();

};

template <class T>
T A::functionA()
{
     T var;
     T result = B::functionB(var); //Class B has not been declared
}

#endif

我调用静态模板函数“函数B”在非模板类B中声明和定义。在类A声明类B之前已经包含...

B.h

#ifndef B_H
#define B_H
class B
{
  template <class T>
  static T functionB(T var) ;
};

template<class T>
T B::functionB(T var)
{
   ...some code
}
#endif

在编译程序期间,以下错误消息是红外线:

// B类尚未宣布

这不是真正的代码,只是ilustration的例子。这种情况似乎在我的程序中调用一些静态方法。你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

发布的代码的具体问题是函数未声明为公共。此外,functionA未返回值。

以下代码将正确执行。

档案A.h

#ifndef A_H
#define A_H
#include "B.h"

class A
{
public:
  template <class T>
  static T functionA();
};

template <class T>
T A::functionA()
{
     T var = 4;
     T result = B::functionB(var); //Class B has not been declared
     return result;
}

#endif

档案B.h

#ifndef B_H
#define B_H
class B
{
public:
  template <class T>
  static T functionB(T var) ;
};

template<class T>
T B::functionB(T var)
{
  var++;
  return var;
}
#endif

档案main.cpp

#include "A.h"
#include <stdio.h>

int main(void)
{
  int result = A::functionA<int>();
  printf("result: %i\n", result);
  return 0;
}

<强>输出

result: 5