【问题标题】:C++ error: assignment of read-only variable [closed]C ++错误:只读变量的赋值[关闭]
【发布时间】:2013-12-15 19:00:07
【问题描述】:

我有一些 C++ 代码返回此错误:

error: assignment of read-only variable ‘parking’

代码:

char const * const parking= "false";

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

这个错误是什么意思,我该如何解决?

【问题讨论】:

  • 知道const 限定符的作用吗?
  • 你真的应该读一本 C++ 初学者的书。
  • 汇编message 的代码也不起作用。 (即使你取消const,它也不会编译。)
  • stackoverflow.com/questions/20207688/…,但你真的应该改用std::string,因为它有更直观的界面。
  • 另外,如果你要初始化一个 C 字符串,你应该做 const char parking[]="false"; 从字符串文字到 const char* 的转换被弃用

标签: c++ constants assignment-operator


【解决方案1】:

您将停车声明为常量指针。

char const * const parking= "false";

所以它只会指向字符串字面量"false" 并且不能被改变。

还有这个说法

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

无效。指针没有加法运算符。

【讨论】:

    【解决方案2】:

    parking 设置为const (char const * const parking = "false"),因此无法修改。

    当您执行parking = "true" 时,它会引发编译时错误。

    如何重现问题非常简单的说明:

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

    const 表示常量,表示不允许更改:

    error: assignment of read-only variable ‘j’
    

    【讨论】:

      【解决方案3】:

      在您的代码中,您使用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 重载+ 以进行连接,因此它会执行您认为在最后一行中所做的事情。以前您添加了一些指针,但这可能不会像您认为的那样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 2014-09-03
        • 1970-01-01
        相关资源
        最近更新 更多