C++:错误 C2143:语法错误:'<'之前缺少';'

C++: error C2143: syntax error : missing ';' before '<'

本文关键字:错误 lt C++ C2143 语法      更新时间:2023-10-16
#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:userslxjhkdocumentsvisual studio 2013projectsstackstackstack.cpp(31): error C2143: syntax error : missing ';' before '<'
1>          c:userslxjhkdocumentsvisual studio 2013projectsstackstackstack.cpp(32) : see reference to class template instantiation 'Stack<T,capacity>' being compiled
1>c:userslxjhkdocumentsvisual studio 2013projectsstackstackstack.cpp(31): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:userslxjhkdocumentsvisual studio 2013projectsstackstackstack.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/)

void clear(){
    pool.clear;
}

应该是

void clear(){
    pool.clear();
}

由于vector<T>在命名空间std中,您应该使用

std::vector<T> pool;

在类定义中。