C ++模板和结构问题

时间:2011-09-08 02:02:06

标签: c++ templates struct

我有这个......

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

我的错误可以在这些行之前或之后吗?

4 个答案:

答案 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;
}