C++ 向量在尝试添加字符串时崩溃

C++ 向量在尝试添加字符串时崩溃,c++,vector,C++,Vector,我正在尝试向vector添加字符串,但添加字符串时程序崩溃。vector在名为customer.hpp的单独头文件中声明,实现在customer.cpp中。在该文件中,我面临addProductTocart函数的问题。提前谢谢 Customer.hpp #ifndef CUSTOMER_HPP #define CUSTOMER_HPP #include "Product.hpp" class Customer { private: std::vector<std::strin

我正在尝试向vector添加字符串,但添加字符串时程序崩溃。vector在名为customer.hpp的单独头文件中声明,实现在customer.cpp中。在该文件中,我面临addProductTocart函数的问题。提前谢谢

Customer.hpp

#ifndef CUSTOMER_HPP

#define CUSTOMER_HPP


#include "Product.hpp"

class Customer

{

private:

std::vector<std::string> carts;

std::string name;

std::string accountID;

bool premiumMember;

public:

Customer(std::string n, std::string a, bool pm);

std::string getAccountID();

std::string cusname();

//std::vector<std::string> getCart();

void addProductToCart(std::string);

bool isPremiumMember();

void emptyCart();

};

#endif
编辑:

Customer* Store:: getMemberFromID(std::string id) { 
    for(int i = 0; i < members.size(); i++) { 
        Customer c = members.at(i);
        if(c.getAccountID() == id) { return &c; } 
    } 
    return NULL;
}

Customer*Store::getMemberFromID(std::string id){
对于(inti=0;i
似乎
客户*c=Store::getMemberFromID(mID)返回无效指针(例如nullptr)。使用调试器检查它

由于您没有提供
Store::getMemberFromID(mID)
的实现,我们无法提供更多帮助

编辑:

Customer* Store:: getMemberFromID(std::string id) { 
    for(int i = 0; i < members.size(); i++) { 
        Customer c = members.at(i);
        if(c.getAccountID() == id) { return &c; } 
    } 
    return NULL;
}
在提供了
getMemberFromID
的实现之后,很明显,您将返回一个指向堆栈分配对象的指针,该对象在超出范围时将被释放。您的代码中只有未定义的行为

如何解决此问题?您可以将实现更改为以下内容:

Customer* Store:: getMemberFromID(std::string id) { 
    for(int i = 0; i < members.size(); i++) { 
        Customer& c = members.at(i);
        //______^_______
        if(c.getAccountID() == id) { return &c; } 
    } 
    return NULL;
}

Customer*Store::getMemberFromID(std::string id){
对于(inti=0;i

无论如何,这不是一个好的解决方案。请考虑以更好的方式重新设计您的问题。

客户*存储::GETMeNoFrOMID(STD:String ID){for(int i=0;i成员.siz());客户C=成员。AT(i);如果(C.GeCuto()= ID){Real&C;}}返回NULL;}这就是执行that@user1210000最好在问题中添加一个编辑。正如你可能在评论中看到的那样,这几乎是不可读的。胡曼已经抓住了它。函数返回向量中值的临时副本。副本超出范围,并在调用方可以使用它之前在函数结束时销毁。格兰芬多得10分。我认为情况并非如此,因为我试图在退出函数之前在购物车内打印值,但它甚至没有达到代码的那部分。因此,该程序在添加到VectorHankYou@HumamHelfawi时崩溃,因为它起作用了。我按照你的建议修改了代码,效果很好,谢谢
Customer* Store:: getMemberFromID(std::string id) { 
    for(int i = 0; i < members.size(); i++) { 
        Customer& c = members.at(i);
        //______^_______
        if(c.getAccountID() == id) { return &c; } 
    } 
    return NULL;
}