我正在尝试使用模板在编译时找到最大的公约数。请考虑以下代码:
#include "stdafx.h"
#include <iostream>
template<int N, int M, int K>
class A{
public:
static const int a=A<M,K,M%K>::a;
};
template<int N, int M>
class A<N,M,0>{
public:
static const int a=M;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << A<11,13,11>::a;
return 0;
}
此代码正常运行,但如果我正在尝试编写
#include "stdafx.h"
#include <iostream>
template<int N, int M>
class GCD{
public:
static const int a=A<N,M,N%M>::a;
};
template<int N, int M, int K>
class A{
public:
static const int a=A<M,K,M%K>::a;
};
template<int N, int M>
class A<N,M,0>{
public:
static const int a=M;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << GCD<11,13>::a;
return 0;
}
我有崩溃错误C2059'常数'。
为什么这段代码不起作用?
答案 0 :(得分:3)
您需要在顶部A
转发声明:
template<int N, int M, int K>
class A;
然后它在标准符合编译器上工作正常。或者您可以将GCD
移到所有A
内容之下。