簡體   English   中英

C ++:錯誤C2143:語法錯誤:缺少';' 在“ <”之前

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM