起初我很抱歉代码稍长......有3个类A,B,C
啊
#ifndef A_H
#define A_H
template <typename T>
class C;
class A
{
public:
template <typename T>
static void testa ( T b);
};
#include "A.hpp"
#endif
A.hpp
#ifndef A_HPP
#define A_HPP
#include "C.h"
#include "B.h"
template <typename T>
void A::testa ( T a)
{
B::testb( a );
}
#endif
溴化氢
#ifndef B_H
#define B_H
class B
{
public:
template <typename T>
static void testb ( T b );
};
#include "B.hpp"
#endif
B.hpp
#ifndef B_HPP
#define B_HPP
#include "C.h"
template <typename T>
void B::testb ( T b )
{
C <T>::test(b, e1 ); //Error
}
#endif
通道
#ifndef C_H
#define C_H
#include "A.h"
typedef enum
{
e1=1, e2,
} TEnum;
template <typename T>
class C
{
public:
static void test (T c, const TEnum t) {}
};
#endif
主文件
#include "A.h"
using namespace std;
int main()
{
double x = 1.0;
A::testa(x);
return 0;
}
由于可能的循环依赖(我的估计),当代码是库的一部分时,会发生以下错误:
C <T>::test(b, e1 ); |261|error: 'e1' was not declared in this scope|.
但是,将代码提取到示例中,无法重现该错误。
VS2012 编译器在这两种情况下都运行良好......
我没有,如何解决这种类型的问题?使用extern是一种好方法吗?
很明显,很难提出建议;特别是当错误无法重现时......
谢谢你的帮助...