gpt4 book ai didi

c++ - 返回对字符串对象的引用,错误 : invalid initialization of reference of type âconst string&. c++

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:16 25 4
gpt4 key购买 nike

我得到了

error: invalid initialization of reference of type âconst string& {aka const std::basic_string<char>&}â from expression of type âstd::string* const {aka std::basic_string<char>* const}â

我一共有4个文件,parking.hparking.cppprintPark.cppma​​in.cpp

这就是我在做的

//parking.h
Class Parking {
string location;
int cost;

public:
void set(const std::string &loc, int num);
const std::string& getLocName() const();

}

.

//parking.cpp
void Parking::set(const std::string &loc, int num) {
//location = new string;
location = loc;

cost = num;
}

// needs to return a reference to a string object
const std::string& Parking::getLocName() const() {

return location;
}

我的 printPark.cpp 使用 Parking 的 getLocName() 来打印到屏幕。并为 parking 对象动态分配内存,并将其与用户从文件中输入的内容一起设置为字符串变量。

//printPark.cpp

//if parking info is in parking.dat load it.

string a, b;
int num =5;

ifstream f(filename);
getline(f, a, '\n');
getline(f, b, '\n');

parking = new Parking[2];

parking[0].set(a,num);
parking[1].set(b, num);

最佳答案

您混淆了引用和地址(它们不一样;& 的位置很关键)。

老实说,您可能一开始就不需要动态分配该成员,因为 std::string 已经动态管理其内容。

//parking.h
class Parking
{
std::string location;
int cost;

public:
// default constructor
Parking() : cost()
{
}

// parameterized constructor
Parking(const std::string& loc, int num)
: location(loc), cost(num)
{
}

void set(const std::string &loc, int num)
{
location = loc;
cost = num
}

const std::string& getLocName() const
{
return location;
}
};

这样做还可以使 Parking 可复制。并且可赋值,无需编写自定义复制构造函数、赋值运算符和析构函数来遵守 Rule of Three (无论如何,您可能都想阅读它,因为它很重要)。

关于c++ - 返回对字符串对象的引用,错误 : invalid initialization of reference of type âconst string&. c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25918291/

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