我的问题再次涉及模板......来自非模板类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的例子。这种情况似乎在我的程序中调用一些静态方法。你能帮帮我吗?
答案 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