0

I have a class that acts like a basic stack. In my member function definitions i get an error at every instance of vec. The error tells me that the expression must have a class type. What must I do to fix this issue?

class Stack{
    public:
        Stack();
        Stack & push(double & t);
        double pop() const;
        unsigned long long getElements();
    private:
        vector <double> vec[10];
        static double answer;
};

Stack::Stack(){
    answer=0;
}

Stack & Stack::push(double & t){
    vec.push_back(t);
    return *this;
}

double Stack::pop()const{
    return vec.pop_back();
}

unsigned long long Stack::getElements(){
    return vec.size();

}
4

1 に答える 1

2

ここにはいくつかの問題があり、それらを修正した後、私は次のようになりました。

#include <vector>
using namespace std;
class Stack{
    public:
        Stack();
        Stack & push(double & t);
        double pop();
        unsigned long long getElements();
    private:
        vector <double> vec;
        static double answer;
};

Stack::Stack(){
    answer=0;
}

Stack & Stack::push(double & t){
    vec.push_back(t);
    return *this;
}

double Stack::pop(){
    double ret = vec.back();
    vec.pop_back();
    return ret;
}

unsigned long long Stack::getElements(){
    return vec.size();

}

私が行った変更は次のとおりです。

  1. stdのベクトルと名前空間のデフォルトのインクルードがありません。
  2. pop_backはvoidを返します-最初に返す要素を取得する必要があります。
  3. ベクトルを変更するため、popを​​constとして宣言しないでください(戻り値をconstにすることができます)。
  4. vec宣言の[10]を削除しました。C配列ではありません。
于 2012-10-11T05:49:40.700 に答える