[英]C++: error C2143: syntax error : missing ';' before '<'
#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;
}
上面是我編寫的代碼,概述了堆棧的非常通用的矢量實現。 但是,當我編譯它時,我從編譯器中收到以下錯誤。
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 ==========
我真的不明白哪里出了問題,我已經多次對代碼進行檢查,但沒有發現任何區別。
void clear(){
pool.clear;
}
應該
void clear(){
pool.clear();
}
並且由於vector<T>
在命名空間std
,因此您應該使用
std::vector<T> pool;
在您的班級定義中。
vector<T>
模板類在std
名稱空間中定義。 您不應在標頭中使用using namespace
語句,而應在所有STL類型的std::
加上std::
...
private:
std::vector<T> pool;
};
...
順便說一句,假設這不是家庭作業,您是否看到過std::stack<T>
? ( http://www.cplusplus.com/reference/stack/stack/ )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.