【问题标题】:Vector expression must have class type向量表达式必须具有类类型
【发布时间】:2012-10-11 05:30:20
【问题描述】:

我有一个类似于基本堆栈的类。在我的成员函数定义中,每个 vec 实例都会出错。该错误告诉我表达式必须具有类类型。我必须怎么做才能解决这个问题?

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();

}

【问题讨论】:

    标签: class function vector stack members


    【解决方案1】:

    这里有很多问题,在修复它们后我得到了:

    #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 数组。

    【讨论】:

    • 谢谢我进行了编辑,但这仍然不能解决问题:/有什么想法吗?
    • 我在“g++ -c x.cpp”上没有收到任何错误。您可以发布错误消息吗?另外我忘了提到我删除了声明中的 [10] - 这不是声明大小的方式。
    猜你喜欢
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多