这个片段会导致上面的错误,为什么?我怎么才能修好它。
class SimpleLogger
{
public:
enum{ LogSeverityLevel = SWB_LOG_LEVEL };
template<int level>
out_policy<bigger_policy<level, SWB_LOG_LEVEL>::value> out; //C3857
~SimpleLogger(){}
};
编辑:正如我们所问的,定义更大,编译器的错误也更准确。
struct is_bigger_equal;
struct is_not_bigger_equal;
template<int first, int second>
struct bigger_policy
{
enum{ value = bigger_policy<first - 1, second - 1>::value };
};
template<>
struct bigger_policy<0, 0>
{
enum{ value = 1 };
};
template<int second>
struct bigger_policy<0,second>
{
enum{ value = 1 };
};
template<int first>
struct bigger_policy<first, 0>
{
enum{ value = 0 };
};
确切的错误是c3857:不允许多个类型的参数列表
发布于 2015-03-05 16:33:43
看起来您正在尝试声明一个“模板变量”,但是没有这样的事情。成员变量(或任何其他变量)不能单独成为模板。不过,它可以是类模板的成员。也许您可以将template <int level>
应用于类,将SimpleLogger
转换为由level
值参数化的类模板:
template <int level>
class SimpleLogger
{
public:
enum{ LogSeverityLevel = SWB_LOG_LEVEL };
out_policy<bigger_policy<level, SWB_LOG_LEVEL>::value> out;
~SimpleLogger(){}
};
这对你来说是否可以接受,首先取决于你希望得到什么。
https://stackoverflow.com/questions/28882812
复制相似问题