我有这个......
template <typename Key, typename Value>
class A {
public:
//...
private:
struct MyStruct{
Key key;
Value value;
};
};
它给了我以下错误:
Error 1 error C2146: syntax error : missing ';' before identifier 'value'
Error 2 error C4430: missing type specifier - int assumed.
Error 3 error C4430: missing type specifier - int assumed.
一些规格: 使用Visual Studio 2010 Windows 7 x64
我的错误可以在这些行之前或之后吗?
答案 0 :(得分:2)
在代码的最后,您忘记了类定义后的分号。
在某些情况下,您需要在模板中编写typename Key key;
而不是简单的Key key;
,因为编译器可能不知道Key
实际上是一个类型名称。所以试试这个:
template <typename Key, typename Value>
class A {
public:
//...
private:
struct MyStruct {
/* typename not allowed here */ Key key;
/* typename not allowed here */ Value value;
};
};
答案 1 :(得分:0)
你忘了最后一个分号来结束你的班级定义。
答案 2 :(得分:0)
首先,也许这只是你粘贴的代码中的一个错字,但是你错过了;在课程定义的最后。
除此之外,我没有看到问题。确保将对象声明为
A<type, type> a;
您对模板类型使用了什么?
答案 3 :(得分:0)
看起来你错过了一个分号来关闭你的班级。
使用g ++ 4.6.1编译这个很好:
#include <iostream>
template <typename Key, typename Value>
class A {
public:
A() {}
private:
struct MyStruct {
Key key;
Value value;
};
};
int main(void) {
A<int, char> a;
}