读书人

vector的一个编译异常

发布时间: 2012-07-30 16:19:05 作者: rapoo

vector的一个编译错误
stack1.h

C/C++ code
#ifndef STACK1_H_INCLUDED#define STACK1_H_INCLUDED#include <iostream>#include <ostream>#include <vector>using namespace std;class Stack1 {public:    Stack1() : _max_size(1024) { _vec.reserve(_max_size);}    Stack1(int max_size) : _max_size(max_size) { _vec.reserve(_max_size);}    virtual ~Stack1(){};    virtual bool pop(int &) const = 0;    virtual bool push(const int &) const = 0;    virtual int  size() const = 0;    virtual bool empty() const = 0;    virtual bool full() const = 0;    virtual bool peek(int &) const = 0;    virtual ostream& print(ostream &os) const = 0;public:    vector<int> _vec;    int _max_size;};#endif // STACK1_H_INCLUDED

stack1.cpp文件
C/C++ code
#include <iostream>#include "stack1.h"#include <vector>using namespace std;class FIFO_Stack1 : public Stack1 {public:    FIFO_Stack1()  {}    FIFO_Stack1(int max_size) : Stack1(max_size) {    }    virtual bool pop(int &) const;    virtual bool push(const int &) const;    virtual int  size() const { return _vec.size();}    virtual bool empty() const { return _vec.empty();}    virtual bool full() const { return _max_size <= _vec.size();}    virtual bool peek(int &) const;    virtual ostream& print(ostream &os) const;/*protected:    vector _vec;    int _max_size;*/};bool FIFO_Stack1::pop(int &elem) const {    if (empty())        return false;    elem = _vec.back();    _vec.pop_back();    //编译错误    return true;}bool FIFO_Stack1::push(const int &elem) const {    if ( full() )        return false;    _vec.push_back(elem);   //编译错误    return true;}bool FIFO_Stack1::peek(int &elem) const {    if ( full() )        return false;    elem = _vec.back();    return true;}ostream& FIFO_Stack1::print( ostream &os ) const {    os << "print FIFO_Stack\n";    for(int i=0; i< _vec.size(); i++) {        os << _vec[i] << ' ';    }    os << '\n';    return os;}


编译错误信息是:
D:\cpp\codblock\essentialch5\Stack1.cpp|32|error: passing `const std::vector<int, std::allocator<int> >' as `this' argument of `void std::vector<_Tp, _Alloc>::pop_back() [with _Tp = int, _Alloc = std::allocator<int>]' discards qualifiers|
不知道是什么原因求高手解答

[解决办法]
bool FIFO_Stack1::push(const int &elem) const {
知道你这个尾巴上的const是在干嘛的吗。

读书人网 >C++

热点推荐