gpt4 book ai didi

c++ - 类成员指向STL列表的特定节点成员?

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:39 25 4
gpt4 key购买 nike

如何将指向某人配偶姓名的指针存储为该人所属类的私有(private)成员?

例如,假设我有以下代码:

#include <iostream>
#include <list>

using namespace std;

class person
{
private:
string name;
string *spouse;

public:
void setName(string tempName) { name = tempName; }
void setSpouse(string &tempSpouse) { spouse = &tempSpouse; } // ERROR HERE?

string getName() { return name; }
string getSpouse() { return spouse; } // ERROR HERE?
};

int main()
{
person entry;
list<person> personList;
list<person>::iterator itr1, itr2;

/* Adding two people/nodes to the linked list. */

entry.setName("John Doe");

personList.push_back(entry);

entry.setName("Tina Doe");

personList.push_back(entry);

/* Attempting to assign Tina Doe as John Doe's spouse. */

for (itr1 = personList.begin(); itr1 != personList.end(); itr1++)
{
if (itr1->getName() == "John Doe")
{
for (itr2 = personList.begin(); itr2 != personList.end(); itr2++)
{
if (itr2->getName() == "Tina Doe")
{
itr1->setSpouse(itr2->getName()); // ERROR HERE?
}
}
}
}

/* Displaying all Names with Spouses afterwards. */

for (itr1 = personList.begin(); itr1 != personList.end(); itr1++)
{
cout << "Name: " << itr1->getName() << " | Spouse: " << itr1->getSpouse() << endl;
}

return 0;
}

我无法将配偶姓名的地址分配给类中的指针成员。我在评论中指出了我认为可能存在错误的地方。

您可以在此处查看代码和错误:https://ideone.com/4CXFnt

任何帮助将不胜感激。谢谢。

最佳答案

getName 返回一个临时的 std::string(name 变量的拷贝),并且编译器试图避免您引用一段很快就会被删除的内存。此错误与列表无关 - 要修复它,您需要在 spouse 变量中存储拷贝(这将导致在多个位置存储相同的数据)或在 getName< 中返回引用。您也可以考虑创建另一个访问器(私有(private)访问器),但这很丑陋。

我建议存储拷贝,但如果确实需要引用/指针,那么修改行就足够了:

    string getName() { return name; }
string getSpouse() { return spouse; } // ERROR HERE?

    string& getName() { return name; }
string getSpouse() { return *spouse; } // ERROR HERE?

但是,为了保持一致性,我建议:

    string& getName() { return name; }
string& getSpouse() { return *spouse; } // ERROR HERE?

关于c++ - 类成员指向STL列表的特定节点成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com