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