Expression: cannot dereference end list iterator是什么意思?

问题描述 投票:0回答:1

我一直在我的代码上收到这个错误信息,它说它在第149行,但第149行什么都没有,所以我很难理解是什么问题。有人知道吗?

上下文--这是一个简单的平衡符号检查程序练习

这是错误信息 之后 我输入文件的名称。

enter image description here

这是完整的代码。

#include <iostream>
#include <fstream>
#include <string>
#include<list>

using namespace std; 

void openInputFile(ifstream& inFile);

template<class T>
class Stack {
    list <T> data;

public:
    Stack() : data() {}
    void push(T newItem) { data.push_front(newItem); }
    T pop() { T topVal = top(); data.pop_front(); 
    return topVal; }
    T top() const { return *data.begin(); }
    bool isEmpty() const { return data.size() == 0; }
    int size() const { return data.size(); }
    void clear() { data.clear(); }
};

class brackets {

    brackets() : bracket() {}

    char bracket; 

};


int main()
{
    Stack<char> dataChecker; 
    ifstream inFile; 
    string charChecker; 
    char currChar; 
    int size;
    bool goodToGo = true; 

    cout << "First enter the name of the data file, 
    then press enter. " << endl;
    openInputFile(inFile);

    while (getline(inFile, charChecker)) {

        size = charChecker.size(); 

        if (charChecker.find("begin") || 
        charChecker.find("Begin") || 
        charChecker.find("BEGIN")) {

            dataChecker.push('b'); 
        }

        if (charChecker.find("end") || 
            charChecker.find("End") || 
            charChecker.find("END")) {

            currChar = dataChecker.pop();

            if (currChar != 'b') {
                goodToGo = false; 
                break; 
            }
        }

        for (int i = 0; i < size; i+= 1) {

            if ((charChecker[i] == '{') || 
               (charChecker[i] == '}') || 
               (charChecker[i] == '[') || 
               (charChecker[i] == ']') ||
               (charChecker[i] == '(') || 
               (charChecker[i] == ')')) {

                  switch (charChecker[i]) {

                    case '{' :
                        dataChecker.push('{');

                    case '[': 
                        dataChecker.push('[');

                    case '(':
                        dataChecker.push('(');

                    case '}':

                        currChar = dataChecker.pop();

                        if (currChar != '{') {
                            goodToGo = false;
                            break;
                        }

                    case ']':

                        currChar = dataChecker.pop();

                        if (currChar != '[') {
                            goodToGo = false;
                            break;
                        }

                    case ')':

                        currChar = dataChecker.pop();

                        if (currChar != '(') {
                            goodToGo = false;
                            break;
                        }



                }

            }




        }

    }

    if (goodToGo == false) {
        cout << "There is an error in the data." << 
         endl; 
    }

    else {
        cout << "The data looks good!" << endl;
    }




    return 0; 
}

void openInputFile(ifstream& inFile) {

    cout << "Please enter a filename: ";
    string filename;
    cin >> filename;
    inFile.open(filename);
    while (!inFile) {
        cout << "Bad file name";
        cout << "Please enter a filename: ";
        cin >> filename;
        inFile.clear();
        inFile.open(filename);
    }
}
c++
1个回答
0
投票

查看文件的第149行 <list> 对话框信息中给出了完整的路径,也可以右键点击,打开后在 #include <list> 编辑器中的帮助)。)

    _NODISCARD reference operator*() const {
#if _ITERATOR_DEBUG_LEVEL == 2
        const auto _Mycont = static_cast<const _Mylist*>(this->_Getcont());
        _STL_ASSERT(_Mycont, "cannot dereference value-initialized list iterator");
        _STL_VERIFY(this->_Ptr != _Mycont->_Myhead, "cannot dereference end list iterator");
#endif // _ITERATOR_DEBUG_LEVEL == 2

        return this->_Ptr->_Myval;
    }

所以这很简单。你有一个列表迭代器(例如 iter)并称 operator* 上(-&gt。*iter). 这是不允许的,断言就是告诉你这一点。当你在调试器中运行程序并查看调用栈时,你可以直接导航到你调用了 *iter.

也许你在打电话 toppop 在一个空栈上?

最新问题
  • 如何根据发票号码和类别区分类别
  • 根据键值对数组进行分组
  • Spread 运算符简单示例
  • 如何破译函数到键值对的映射
  • 设置tomcat版本时Spring Boot应用程序无法启动
  • 返回勒让德多项式系数的函数不够准确
  • 枚举的模板专业化
  • 502 错误网关内部服务器错误 lambda 提供二进制文件
  • 超过配额。超出队列或主题端点限制 - Solace 3560 消息路由器设备
  • 覆盖默认 Java 记录构造函数中的变量分配[重复]
  • 在密钥环中找不到密钥并且取消保护会话 cookie 时出错
  • Denodo 相当于 Hive 中的collect_set、named_struct
  • 扩展 GCC 进行内存管理
  • 如果尝试直接从 body 更新状态,为什么既没有效果也没有错误?
  • 使用 javascript 将话题标签附加到 URL
  • 用传单绘制并导出
  • 尝试运行命令时出错:alembic revision --autogenerate -m“description”
  • Keycloak 23:有关阻止用户的问题
  • java servlet 编译错误
  • 在球体表面绘制点
© www.soinside.com 2019 - 2024. All rights reserved.

玻璃钢生产厂家宣武区市政玻璃钢花盆黑龙江玻璃钢 雕塑广州玻璃钢装饰雕塑制作厂兴安盟玻璃钢雕塑制作济源玻璃钢人物景观雕塑公司连云港玻璃钢雕塑设计与制作广场标识玻璃钢仿铜雕塑设计修武玻璃钢雕塑设计大型招财猫玻璃钢雕塑菏泽景观园林校园玻璃钢雕塑乌当区玻璃钢雕塑厂哪家好济宁玻璃钢美陈雕塑树脂玻璃钢雕塑马南京卡通玻璃钢雕塑厂家哪家好玻璃钢雕塑大量销售龙泉玻璃钢南瓜屋雕塑广东玻璃钢海豚雕塑厂家五一商场美陈方案海口商场美陈值得信赖通用玻璃钢雕塑摆件市场报价玻璃钢雕塑安全吗玻璃钢雕塑 户外宣威玻璃钢卡通雕塑玻璃钢人像雕塑专业西安创意玻璃钢雕塑销售厂家新密室内不锈钢玻璃钢雕塑公司商场美陈雕塑创意玻璃钢浮雕景观雕塑价格云梦玻璃钢造型雕塑新干线白色狮子玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化