C++:错误C2143:语法错误:缺少';'之前'<'
问题描述:
#include "stdafx.h"
#include<vector>
template<class T, int capacity = 30>
class Stack {
public:
Stack(){
pool.reserve(capacity);
}
void clear(){
pool.clear;
}
void isEmpty(){
return pool.empty();
}
T& topEl(){
return pool.back();
}
T pop(){
T el = pool.back();
pool.pop_back();
return el;
}
void push(const T& el){
pool.push_back(el);
}
private:
vector<T> pool;
};
int _tmain(int argc, _TCHAR* argv[])
{
//Stack<int,30> test;
return 0;
}
上面是我写的代码,它描述了一个非常通用的堆栈向量实现。但是,当我编译它时,我从编译器中得到了以下错误。C++:错误C2143:语法错误:缺少';'之前'<'
1>------ Rebuild All started: Project: Stack, Configuration: Debug Win32 ------
1> stdafx.cpp
1> Stack.cpp
1>c:\users\lxjhk\documents\visual studio 2013\projects\stack\stack\stack.cpp(31): error C2143: syntax error : missing ';' before '<'
1> c:\users\lxjhk\documents\visual studio 2013\projects\stack\stack\stack.cpp(32) : see reference to class template instantiation 'Stack<T,capacity>' being compiled
1>c:\users\lxjhk\documents\visual studio 2013\projects\stack\stack\stack.cpp(31): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\lxjhk\documents\visual studio 2013\projects\stack\stack\stack.cpp(31): error C2238: unexpected token(s) preceding ';'
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
我实在是不明白的地方出了问题,我已经检查的代码对我的书多次,但找不到任何区别。
答
vector<T>
模板类在std
命名空间中定义。你不应该在头使用using namespace
声明,所以不是你应该前缀的所有STL类型的std::
...
private:
std::vector<T> pool;
};
...
顺便说一句,假设这是不是一个课外练习,你见过std::stack<T>
? (http://www.cplusplus.com/reference/stack/stack/)
+0
谢谢!我不知道它退出。 :) – 2014-11-25 03:20:02
答
void clear(){
pool.clear;
}
应该
void clear(){
pool.clear();
}
而且,由于vector<T>
是在命名空间std
,你应该在你的类定义中使用
std::vector<T> pool;
。
+0
谢谢你的时间。 – 2014-11-25 03:20:30
std :: vector,not vector。 – Barry 2014-11-25 03:12:43
您的包含也缺少一个空格。 – 2014-11-25 03:12:57
哦,那有用。我的书没有std ::。这让我非常困惑!谢谢! – 2014-11-25 03:14:09