gpt4 book ai didi

c++ - 段错误和运算符重载

转载 作者:行者123 更新时间:2023-11-30 01:51:20 24 4
gpt4 key购买 nike

考虑以下代码:

bool Queue::operator+=(int value) {
std::cout << "Appending the value " << value;
std::cout << " by using operator overloading." << std::endl;

// in the actual code: q->append(value);

return false;
}

int main() {
Queue *q = new Queue();
for (unsigned i = 0; i < 1000; i++) {
q+=6;
}
q->append(6);
delete q;

return EXIT_SUCCESS;
}

在实际实现中我有更多的代码,但这里是主要问题:

我尝试使用运算符重载作为附加函数,将元素添加到 Queue 对象。主要功能与函数 Queue::append 一起使用。无论如何,我编译了这段代码并且 += 运算符重载编译没有错误。但是程序还是崩溃了。

调试时,似乎每当我使用 Queue 对象 q(例如只是析构函数或其他函数,如 Queue::append ) 使用重载后,我得到一个段错误

我不知道我做错了什么。

很明显,在这个例子中,重载包括一个输出和返回一个 bool

最佳答案

q 声明为指向 Queue指针

表达式 q += 6 使用您声明的运算符重载,它使用指针算术的标准运算符,并导致添加指针地址到。

for 循环之后,q 不再指向 Queue 对象,访问它会导致段错误。

要访问q 指向的对象,您必须解引用 指针,例如*q

关于c++ - 段错误和运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26206956/

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