c++;重载运算符++; 对于一个学校项目,我必须在C++中实现一个传感器类,它具有私有属性(布尔值),它指示传感器是否激活。 我必须以这样的方式重载++运算符,如果使用运算符++,则属性active将设置为true

c++;重载运算符++; 对于一个学校项目,我必须在C++中实现一个传感器类,它具有私有属性(布尔值),它指示传感器是否激活。 我必须以这样的方式重载++运算符,如果使用运算符++,则属性active将设置为true,c++,operator-overloading,C++,Operator Overloading,我实现了以下功能(sensor.cpp): Sensor::Sensor(int-id,std::string-vendor):\u-id(id),\u-vendor(vendor){ std::cout因为传感器是一个指针,传感器+++增加指针而不是对象。最简单的解决方案是首先不使用指针 int main() { Sensor sensor{1, "sample vendor"}; sensor.setStatus(false); sensor++; std::

我实现了以下功能(sensor.cpp):

Sensor::Sensor(int-id,std::string-vendor):\u-id(id),\u-vendor(vendor){

std::cout因为
传感器
是一个指针,
传感器+++
增加指针而不是对象。最简单的解决方案是首先不使用指针

int main() {
    Sensor sensor{1, "sample vendor"};
    sensor.setStatus(false);
    sensor++;
    std::cout << "status: " << sensor.getStatus() << std::endl;
}
代码中的另一个错误如下:

Sensor& Sensor::operator++() {
    // You don't want to do this... it creates a copy!
    Sensor result = *this;
    this->setStatus(true);
    // This is a dangling reference!
    return result;
}
改用这个:

Sensor& Sensor::operator++() {
    this->setStatus(true);
    return *this;
}

由于传感器是一个指针,
sensor++
会增加指针而不是对象。最简单的解决方案就是一开始就不使用指针

int main() {
    Sensor sensor{1, "sample vendor"};
    sensor.setStatus(false);
    sensor++;
    std::cout << "status: " << sensor.getStatus() << std::endl;
}
代码中的另一个错误如下:

Sensor& Sensor::operator++() {
    // You don't want to do this... it creates a copy!
    Sensor result = *this;
    this->setStatus(true);
    // This is a dangling reference!
    return result;
}
改用这个:

Sensor& Sensor::operator++() {
    this->setStatus(true);
    return *this;
}

解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,应逐行检查代码。有关更多帮助,请阅读。至少应[编辑]您的问题包括一个重现您的问题的示例,以及您在调试器中所做的观察。有很多错误。请仔细阅读。此外,布尔值上的
++
没有多大意义。
传感器结果=*此;
应为
传感器&结果=*此;
,以避免返回对临时值的引用(更好:
直接返回*this;
),即使您不使用它。另外,您使用的是增量运算符来执行其他操作。不太好。解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该[编辑]您的问题包括一个重现您的问题的示例,以及您在调试器中所做的观察。有很多错误。请仔细阅读。此外,布尔值上的
++
没有多大意义。
传感器结果=*此;
应为
传感器&结果=*此;
,以避免返回对临时值的引用(更好:
直接返回*this;
),即使你不使用它。你也在使用递增运算符做其他事情。不好。OPs对于奇怪的bug有多大的创造性?:)C++是一种很棒的语言,它使人们能够产生创造性的bug。请检查其中一个:。非常有创造性。OPs对于奇怪的bug有多大的创造性?:)C++是一种伟大的语言,它能让人们创造创意。