2013-12-15 70 views
0

我有一些C++代碼,返回此錯誤分配:C++錯誤:只讀變量

error: assignment of read-only variable ‘parking’ 

代碼:

char const * const parking= "false"; 

if (phidgets.value(PHIDGET3V_1) > 1000) { 
    parking = "true"; 
} 
else{ 
    parking = "false"; 
} 

這個錯誤是什麼意思,我如何修復它?

+0

任何想法什麼'const'限定符做? – P0W

+3

你應該真的閱讀一本初學C++的書。 – 2013-12-15 19:03:34

+0

組裝'message'的代碼也不起作用。 (即使你脫掉const也不會編譯。) –

回答

2

你宣佈停車爲常量指針。

char const * const parking= "false"; 

因此,將僅指向字符串字面"false",不得改變。

而且這種說法

char const * const message = "Value: "+ parking +" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy"; 

是無效的。指針沒有額外的運算符。

4

parking設置爲constchar const * const parking = "false"),所以它不能被修改。

當你做parking = "true"它會引發編譯時錯誤。

如何重現問題很簡單地說明:

#include <iostream> 
int main(){ 
    const int j = 5; 
    j = 7; 
} 

const意味着持續的,這意味着你不能改變它:

error: assignment of read-only variable ‘j’ 
1

在你的代碼設置停車變量與const,這是告訴編譯器,它不會稍後修改。稍後通過將其設置爲true或false來修改停車位。

使用std::string是更加慣用的C++,但。所以我會做這個:

#include<string> 
    std::string parking = "false"; 

    if (phidgets.value(PHIDGET3V_1) > 1000) { 
     parking = "true"; 
     //leds_on(LEDS_RED); 
    } else { 
     parking = "false"; 
     //leds_off(LEDS_RED); 
    } 
std::string message = "Value: "+ parking +" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy"; 

std::string重載+做級聯所以它做什麼,你認爲它在最後一行。以前你加入了一些指針,可能不會做你認爲它的作用。