c++ - vector 迭代器不可取消引用( vector 内 vector )

标签 c++ vector struct dereference ofstream

我正在尝试将这些 vector 中的一些数据写入文本文件。当我运行代码时,它返回运行时错误。 CategoryProductCartCustomerAddress都是struct 包含每个 get_member 返回的成员。

ofstream write_cats;
    write_cats.open("catprd.dat", ios::out, ios::trunc);
    vector<Category>::iterator i;
    write_cats << cats.size() << endl;
    for (i = cats.begin(); i < cats.end(); i++) {
        write_cats << i -> get_catid() << '\t';
        }
    vector<Product>::iterator j;
    write_cats << prods.size() << endl;
    for (j = prods.begin(); j < prods.end(); j++) {
        write_cats << j -> get_prodid() << '\t';
        write_cats << j -> get_prodprice() << endl;
        }
    write_cats.close();

    ofstream write_carts;
    write_carts.open("carts.dat", ios::out, ios::trunc);
    vector<Cart>::iterator k;
    write_carts << carts.size() << endl;
    for (k = carts.begin(); k < carts.end(); k++) {
        write_carts << k -> get_cartid() << '\t';
        write_carts << k -> get_day() << endl;
        }
    vector<Cart_item>::iterator l;
    write_carts << cart_items.size() << endl;
    for (l = cart_items.begin(); l < cart_items.end(); l++) {
        write_carts << l -> get_cartitemid() << '\t';
        write_carts << l -> get_qty() << endl;
        }
    write_carts.close();

    ofstream write_custs;
    write_custs.open("custs.dat", ios::out, ios::trunc);
    vector<Customer>::iterator m;
    vector<Address>::iterator n;
    write_custs << custs.size() << endl;
    for (m = custs.begin(); m < custs.end(); m++) {
        write_custs << m -> get_cust_id() << '\t';
        write_custs << n -> get_zip_code() << endl;
        }
    write_custs.close();

返回运行时错误“Vector iterator not dereferencable”

下面是 struct Address 的样子:

using namespace std;
#pragma once
#include <string>

struct Address {

public:

int get_st_number() const{return st_number;} 
int get_zip_code() const{return zip_code;} 
string get_st_name() const{return st_name;} 



Address(){}                                 
Address (int num, string name, int zip) 
    : st_number(num), st_name(name), zip_code(zip) {}

private:
int st_number;
int zip_code;
string st_name;


};

构造客户:

struct Customer {
public:

Address get_address() const{return addr;} 
int get_cust_id() const{return cust_id;}  customer id
string get_name() const{return cust_name;} 
Customer (int id, string n, Address a)  
    : cust_id(id), cust_name(n), addr(a) {}


string display_addr() const {
    std::cout<<setw(15)<<cust_name<<" ";
    std::cout<<setw(15)<<cust_id<<" ";

    return string();
}



private:

int cust_id;
string cust_name;
Address addr;           
};

最佳答案

你忘记初始化vector<Address>::iterator n;

关于c++ - vector 迭代器不可取消引用( vector 内 vector ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032161/

相关文章:

c++ - 对 'cv::viz::Viz3d::Viz3d(std::string&const)' 的 undefined reference

c++ - QGraphicsView:蛇线和线动画

c++ - 将字符串对象的 vector 输出到文件

c++ - 求 vector int 的一部分的总和

c++ - 读取和写入 C++ vector 到文件

c - C语言写入和读取文件

c++ - 没有 Visual Studio,其他人如何运行我的 SFML/C++ 项目?

c++ - 未解析的外部符号 PriorityQueue

c - (u)intN_t 总是与 N 位对齐?

struct - 我们什么时候应该使用结构而不是枚举?