为什么我的模板类没有编译?

时间:2016-03-27 06:08:53

标签: c++ templates c++11

http://pastebin.com/k7Czfi4S

我得到了18个错误。主要的是它说模板有太多参数。我做错了什么?

编辑:抱歉。这是错误:

Error   1   error C2146: syntax error : missing ',' before identifier 'maxSize' c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   30  1   OOPTest2016-QueueTemplate

Error   4   error C2146: syntax error : missing ',' before identifier 'maxSize' c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   36  1   OOPTest2016-QueueTemplate

Error   7   error C2146: syntax error : missing ',' before identifier 'maxSize' c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   55  1   OOPTest2016-QueueTemplate

Error   10  error C2146: syntax error : missing ',' before identifier 'maxSize' c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   60  1   OOPTest2016-QueueTemplate

Error   13  error C2146: syntax error : missing ',' before identifier 'maxSize' c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   89  1   OOPTest2016-QueueTemplate

Error   16  error C2146: syntax error : missing ',' before identifier 'maxSize' c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   113 1   OOPTest2016-QueueTemplate

Error   6   error C2244: 'Queue<T,maxSize>::~Queue' : unable to match function definition to an existing declaration    c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   52  1   OOPTest2016-QueueTemplate

Error   15  error C2244: 'Queue<T,maxSize>::deque' : unable to match function definition to an existing declaration c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   110 1   OOPTest2016-QueueTemplate

Error   12  error C2244: 'Queue<T,maxSize>::enque' : unable to match function definition to an existing declaration c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   86  1   OOPTest2016-QueueTemplate

Error   18  error C2244: 'Queue<T,maxSize>::examine' : unable to match function definition to an existing declaration   c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   122 1   OOPTest2016-QueueTemplate

Error   9   error C2244: 'Queue<T,maxSize>::getCount' : unable to match function definition to an existing declaration  c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   57  1   OOPTest2016-QueueTemplate

Error   3   error C2244: 'Queue<T,maxSize>::Queue' : unable to match function definition to an existing declaration c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   32  1   OOPTest2016-QueueTemplate

Error   2   error C2977: 'Queue' : too many template arguments  c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   30  1   OOPTest2016-QueueTemplate

Error   5   error C2977: 'Queue' : too many template arguments  c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   36  1   OOPTest2016-QueueTemplate

Error   8   error C2977: 'Queue' : too many template arguments  c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   55  1   OOPTest2016-QueueTemplate

Error   11  error C2977: 'Queue' : too many template arguments  c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   60  1   OOPTest2016-QueueTemplate

Error   14  error C2977: 'Queue' : too many template arguments  c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   89  1   OOPTest2016-QueueTemplate

Error   17  error C2977: 'Queue' : too many template arguments  c:\users\zack\documents\visual studio 2013\projects\ooptest2016-queuetemplate\ooptest2016-queuetemplate\queue.hpp   113 1   OOPTest2016-QueueTemplate

编辑2:好的。它已被修复。在上午的帮助下,我能够得到一些可以编译的东西。我会尽力解释,以防其他人出现并看到此情况并处于类似情况。

由于Node是Queue的内部类,我不得不使用范围解析运算符(::)从模板中访问它。我使用了Queue<typename T, int maxSize>::Node,但typenames导致了问题。应该说的是Queue<T, int>::Node。我还做了其他一些错误,但他们都是愚蠢的语法错误。

1 个答案:

答案 0 :(得分:1)

考虑一下,例如

template<typename T, int maxSize>
Queue<typename T, int maxSize>::Queue()                                                                                                                      
{
}

第一行,

template<typename T, int maxSize>

表示以下内容由typename Tint maxSize参数化。然而,在此之后,您的班级为Queue<T, maxSize>,因此它应该是

template<typename T, int maxSize>
Queue<T, maxSize>::Queue()                                                                                                                      
{
}