C++ 编译问题错误 - C2332:<class: missing tag name>
C++ compilation issue error - C2332: <class: missing tag name>
VS 2005 -> 编译无任何错误。
VS 2010 -> 编译有任何错误。
例如代码片段
template< bool f > struct static_assert;
template<> struct static_assert<true> { static_assert() {} };
编译器错误:
error C2332: 'struct': missing tag name
例如代码片段
template< typename T >
class abcd
{
struct xyz
{
xyz();
char c;
T tt;
};
public:
enum { value = sizeof(xyz)-sizeof(T) < sizeof(T) ? sizeof(xyz)-sizeof(T) : sizeof(T) };
};
编译器错误:
error C2332: 'class': missing tag name
任何建议。
在你的第一个代码片段中,问题是 static_assert
变成了 C++11 标准中的 reserved keyword (VS-2010 似乎正在使用它),而它是 'allowed' 以前版本语言中的标识符(例如 VS-2005 编译器使用的)。要解决此问题,请更改您的结构名称,即使这意味着只是更改一两个字母的大小写:
template< bool f > struct Static_Assert; // C++ is case-sensitive, so this is OK!
template<> struct Static_Assert<true> { Static_Assert() { } };
我无法在您的第二个代码片段(使用 VS-2010)中重现该问题。
VS 2005 -> 编译无任何错误。
VS 2010 -> 编译有任何错误。
例如代码片段
template< bool f > struct static_assert;
template<> struct static_assert<true> { static_assert() {} };
编译器错误:
error C2332: 'struct': missing tag name
例如代码片段
template< typename T >
class abcd
{
struct xyz
{
xyz();
char c;
T tt;
};
public:
enum { value = sizeof(xyz)-sizeof(T) < sizeof(T) ? sizeof(xyz)-sizeof(T) : sizeof(T) };
};
编译器错误:
error C2332: 'class': missing tag name
任何建议。
在你的第一个代码片段中,问题是 static_assert
变成了 C++11 标准中的 reserved keyword (VS-2010 似乎正在使用它),而它是 'allowed' 以前版本语言中的标识符(例如 VS-2005 编译器使用的)。要解决此问题,请更改您的结构名称,即使这意味着只是更改一两个字母的大小写:
template< bool f > struct Static_Assert; // C++ is case-sensitive, so this is OK!
template<> struct Static_Assert<true> { Static_Assert() { } };
我无法在您的第二个代码片段(使用 VS-2010)中重现该问题。