2011-09-08 67 views
1

我有这个...C++模板和结构问题

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的64位

我的错误可以在这些行之前还是之后?

+1

显示这是造成错误的代码了。顺便说一下,您在类定义的末尾丢失了一个分号。 –

+0

这取决于你发送给模板的类型。你能提供一个完整的错误的例子,也是你的用法的例子吗? – Suroot

+0

为我编译使用xcode(gcc4.2) – Colin

回答

2

在类定义之后,在代码的最后,您忘记了一个分号。

在某些情况下,您需要在模板中编写typename Key key;而不是简单的Key key;,因为编译器可能不知道Key确实是typename。所以试试这个:

template <typename Key, typename Value> 
class A { 
public: 
    //... 
private: 
    struct MyStruct { 
     /* typename not allowed here */ Key key; 
     /* typename not allowed here */ Value value; 
    }; 
}; 
+0

oops,我已经在代码中。这是一个错字 – JavierIEH

+1

@Javier:那应该没问题。错误在别的地方。 –

+0

好像我有一个错字...使用T而不是Value。 但现在我有另一个错误。它说: 错误错误C2233:'表2':包含零大小数组的对象数组是非法的 – JavierIEH

0

你忘了最后一个分号来结束你的类定义。

0

首先,也许这只是您粘贴的代码中的错字,但您错过了;在类定义的末尾。

除此之外,我没有看到问题。确保你声明的对象为 A<type, type> a;

你对模板类型使用什么?

+0

根据我在这里阅读的内容,看起来你的错误是在别的地方,很可能是一个缺少的分号“;” – 2011-09-08 02:56:00

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; 
} 
+0

它也编译我,我想我的错误是在别的地方,但我不能找到它! – JavierIEH