Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 分段错误和运算符重载_C++_Segmentation Fault_Operator Keyword - Fatal编程技术网

C++ 分段错误和运算符重载

C++ 分段错误和运算符重载,c++,segmentation-fault,operator-keyword,C++,Segmentation Fault,Operator Keyword,考虑以下代码: 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;

考虑以下代码:

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::append配合使用。无论如何,我编译了这段代码,+=操作符重载编译时没有错误。但是程序还是崩溃了

在调试时,似乎每当我在使用重载后使用队列对象q(例如析构函数)或其他函数(如Queue::append)时,就会出现分段错误

我不知道我做错了什么

显然,在本例中,重载包括输出和返回bool。

q被声明为指向队列的指针

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

在for循环之后,q不再指向队列对象,访问它会导致分段错误

要访问q指向的对象,必须取消对指针的引用,例如*q。

q被声明为指向队列的指针

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

在for循环之后,q不再指向队列对象,访问它会导致分段错误


要访问q指向的对象,必须取消对指针的引用,例如*q.

我想你的意思是*q+=6;谢谢!这么愚蠢的错误…我对C++有一种新的看法,完全忽视了……我认为你是指*Q+=6;谢谢!这么愚蠢的错误……我对C++有点新,完全忽视了…