2016-11-06 28 views
0

学校プロジェクトでは、センサーがアクティブかどうかを示すprivateプロパティactive(boolean)を持つC++でセンサークラスを実装する必要があります。 ++演算子をオーバーロードする必要があります。演算子++を使用すると、activeプロパティはtrueに設定されます。C++オーバーロード演算子++

Iは、下記(sensor.cpp)実装:私は、プログラムが実行される最後の方法を用いて(終了)を実行停止気づい

int main(int argc, char *argv[]) { 
    Sensor * sensor = new Sensor(1, "sample vendor"); 
    sensor->setStatus(false); 
    sensor++; 
    std::cout << "status: " << sensor->getStatus() << std::endl; 
} 

Sensor::Sensor(int id, std::string vendor) : _id(id), _vendor(vendor) { 
    std::cout << "Sensor created with id: " << Sensor::getId() << std::endl; 
    _status = false; 
} 

bool Sensor::getStatus() { 
    return _status; 
} 

void Sensor::setStatus(bool status) { 
    _status = status; 
} 

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

main.cppにしsensor-> setStatus(false); main.cppにはありますが、私の端末にエラーは表示されず、コンパイラーは不平を言っていません。

誰かが私が何をやったのか、それをどのように修正して状態が真になるように修正できるのか考えていますか? sensorがポインタであるので、予め

+0

権利をこのような問題を解決するツールはデバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+0

かなりの間違いがあります。よく読む[this](http://stackoverflow.com/questions/4421706/operator-overloading)。また、ブール値の '++'はあまり意味がありません。 – juanchopanza

+0

'Sensor result = * this;'は、センサを使用しない場合でも、一時的な(より良い: 'return * this;')参照を返さないようにするために、 'Sensor&result = * this;'にする必要があります。また、インクリメント演算子を使用して別の処理をしています。良くない。 –

答えて

2

おかげで、sensor++ポインタないオブジェクトをインクリメントします。最も簡単な解決策は、最初にポインタを使用しないことです。別の解決策は、(*sensor)++を使用することです

int main() { 
    Sensor sensor{1, "sample vendor"}; 
    sensor.setStatus(false); 
    sensor++; 
    std::cout << "status: " << sensor.getStatus() << std::endl; 
} 

...

int main() { 
    std::unique_ptr<Sensor> sensor = 
     std::make_unique<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; 
} 
+0

OPが奇妙なバグのためにどのように創造的になることができますか? :) –

+0

C++は素晴らしい言語です。人々が創造的なバグを作り出すことができます。 –

+1

をチェックしてください:http://stackoverflow.com/questions/40427771/weird-error-when-reading-a-large-txt-file-in-c/40427819#40427819地獄のようなクリエイティブ。 –

関連する問題