向量上推送方法的C ++错误

时间:2014-09-05 13:19:14

标签: c++ vector push

我是使用c ++的新手,所以请原谅我一点点。我正在尝试实现一个在模板矢量末尾添加项目的推送功能。虽然我正在使用与Vector关联的push_back函数,但我收到的错误消息无法解释。

更新:我知道在头文件中实现这些功能是不合适的,但这就是为我设置项目的方式,我需要让它运行。以下代码适用于“stac_vec_tpt.h。”

我希望这会让事情更加清晰。

以下是正在使用的头文件的代码:

#ifndef _STACK_VEC_TPT_H_
#define _STACK_VEC_TPT_H_
#include <stdexcept>

using namespace std;

// abstract stack class implemented using vector
template<class T>
class abs_stack_vec {
public:
// pushes an element onto the top of the stack. 
// grows the vector if needed.
virtual void push(const T& elem)=0;

// pops an element from the top of the stack.
// does nothing if the stack is empty.
virtual void pop()=0;

// returns the value of the top element on the stack.
// throws domain_error if the stack is empty.
virtual const T& top() const=0;

// returns the number of elements currently on the stack.
virtual unsigned size() const=0;
};

// the following class inherits from the abstract stack class
// using its own implementation of a vector
// you must implement the abstract methods push, pop, and top.
template<class T>
class mystack_vec: public abs_stack_vec<T> {
public:
    unsigned size() const {return _size;}

// method used for growing vector when size equals capacity
// and need to add more elements
void grow() {
    T* temp = new T[_size * 2];
    for(unsigned i = 0; i < _size; ++i) {
        temp[i] = _values[i];
    }
    delete[] _values;
    _values = temp;
    _capacity = _size * 2;
}

// default constructor
mystack_vec() {
    _capacity = 5;
    _size = 0;
    _values = new T[_capacity];
}

//destructor
~mystack_vec() {
    delete[] _values;
}

// TO-DO: YOU MUST IMPLEMENT: PUSH
void push(const T& elem) {
    mystack_vec.push_back();
}
// END OF TO-DO

private:
    T *_values; // array !!
    unsigned _size, _capacity;
};
#endif

我收到的错误消息如下:错误1错误C2143:语法错误:缺少';'在'。'之前第62行

第62行用于void push()中的语句“mystack_vec.push_back();”。

3 个答案:

答案 0 :(得分:2)

要修复语法错误,您需要告诉编译器实现属于mystack_vec

template<typename T>
mystack_vec<T>::~mystack_vec() {
    delete[] _values;
}

template<typename T>
void mystack_vec<T>::push(const T& elem) {
    // The implementation needs to check if you have enough capacity, 
    // grow _values if necessary,
    // and store elem in the _values[_size++]
}

实施push运算符是您锻炼的基础。鉴于你有一个有效的grow()功能,这并不难。您在实施过程中需要遵循的三个步骤在上面的评论中进行了解释。

答案 1 :(得分:0)

mystack_vec是一种类型,而不是一种对象。您可以对其进行的唯一调用是针对静态函数,而这些函数将使用::而不是.。出现错误消息是因为它期望您声明一个变量或某个东西,并且不期望该位置有.

答案 2 :(得分:0)

访问提供的头文件底部所述的数组

`private:
    T *_values; // array !!
    unsigned _size, _capacity;
};`

然后为push方法实现以下代码:

    void push(const T& elem) {
    if (_capacity == _size)
    {
        grow();
    }

    _values[_size] = elem;
    _size++;
}