C++ 获取C+中构造项/成员的地址+;

C++ 获取C+中构造项/成员的地址+;,c++,construct,C++,Construct,我正在编写客户数据库的一部分,该数据库负责创建新客户并向他们销售商品。 在“Customer.h”中,我有一个结构: struct Customer { String name; int bottles; Customer(String); Customer(void) { name = "__invalid__"; } }; 我在文件“CustomerDB.h”中有一个类 “CustomerDB.cpp”中有一个构造函数 我在另一个函数中创

我正在编写客户数据库的一部分,该数据库负责创建新客户并向他们销售商品。 在“Customer.h”中,我有一个结构:

struct Customer {
    String name;
    int bottles;
    Customer(String);
    Customer(void) { name = "__invalid__"; }
};
我在文件“CustomerDB.h”中有一个类

“CustomerDB.cpp”中有一个构造函数

我在另一个函数中创建*一个对象(在“CustomerDB.cpp”中)

还有一个CustomerDB的对象:

CustomerDB数据库(位于另一个处理购买的cpp文件中)

字符串输入有效。对象已创建。没有问题。 所以我有两个问题,一个是因为另一个

  • 我需要在此函数中创建一个新的非本地客户对象(存储到非本地数据库中),并且
  • 返回对它的引用。但是我刚才调用的构造函数没有给我一个引用。它只是做到了,它应该做到的。 我无意中创建了一个本地对象,而不是添加到“主”数据库中的对象。因此,参考资料毫无用处
  • 如果我尝试
    返回客户它表示“客户不引用某个值。”

    欢迎提供任何帮助/建议

    我需要返回这个新客户的地址

    不,您需要返回对它的引用

    但是我刚才打电话给的构造器

    你从不调用构造函数。您声明了一个对象

    没有给我地址。我如何找到/获得此新客户并返回其地址

    您采用如下对象的地址:

    return &Customer;
    
    但要返回引用,只需:

    return Customer;
    

    但这行不通

    您将返回对局部变量的引用。它即将超出范围,使引用悬而未决


    因此,您需要重新考虑使用此设计的选择。

    1。您试图返回一个自动作用域的变量。。所以这是行不通的。2.为什么要在重载数组索引运算符([])中执行此操作?即使你想这样做,我也不认为索引操作符可以接受字符串参数。我假设
    CustomerDB
    有一些
    Customer
    对象的集合?然后,您可以返回对其中一个对象的引用,但不能返回对函数中创建的临时对象的引用。但是我认为需要更多的设计背景。这听起来像是你想要一个
    std::map
    或类似的。客户&
    中的
    &
    没有指明地址<代码>和/>代码在C++中有三个不同的含义,这取决于上下文。好的,我知道对象是被制作的。我假设它不是生成它的函数的局部。我应该如何在任何函数中获取对象的引用?换句话说,我还可以使用什么方法来获取对象的引用?@WesLee您没有提供足够的信息来给出具体的解决方案,但
    []
    建议将对象存储在寿命更长的地方,可能在
    Customer
    s的
    std::vector
    std::map
    中,它是
    CustomerDB
    成员变量。这样就可以通过引用安全地返回
    Customer
    ,您可以查找它并在以后再次使用它。@WesLee如果它不是一个真正的局部变量,那么您可以按如下所示操作。但实际上,我们需要知道您的代码实际上是什么,然后才能给出正确的答案。
    Customer& CustomerDB::operator[](string name) {
         Customer Customer(name); 
         return Customer;
    
    return &Customer;
    
    return Customer;