代码之家  ›  专栏  ›  技术社区  ›  James

为什么我不能从用户那里读取一个值并使其成为常数?

  •  -1
  • James  · 技术社区  · 7 年前

    const int quantity;
    cout << "How much spacing do you want in-between the frames? " ;
    cin >> quantity;
    

    错误:未初始化的常量“数量”[-fpermissive]

    如果我只使用类型,则不会发生这种情况 整数

    int quantity;
    cout << "How much spacing do you want in-between the frames? " ;
    cin >> quantity;
    

    编译起来没有问题。我是C++新手,所以我想知道为什么会这样。

    5 回复  |  直到 7 年前
        1
  •  7
  •   templatetypedef    7 年前

    如果将变量定义为

    const int quantity;
    

    你是说“我想要一个 int quantity 在任何情况下,我都不希望它的价值发生变化。“因此,如果你再写

    cin >> quantity;
    

    编译器说了一些大意是“等等-你想让我更改

    我的感觉是,你想要这样做,在你给一个初始值之后 这种价值永远不会改变,但随着 const

    const int quantity = readValue();
    

    对于某些功能 readValue() 整数 如果给定一个固定值,它知道该值永远不会改变,并且你永远不会试图直接 cin 转化为价值

    从更技术的角度来看,当编译器读取

    operator >> 结果是因为没有一种不同的方式可以让你阅读 cin公司 ,阅读a char 等等),因为他们每个人都假设他们可以获得有关价值的可变(可修改)视图。同样,这两个问题都源于编译器将代码视为两个独立的错误,而不是一个大的“OOP”,这不是为什么

        2
  •  2
  •   Mark Ransom    7 年前

    您可以初始化 const

    int ReadAnInt()
    {
        int temp;
        cin >> temp;
        return temp;
    }
    
    const int quantity = ReadAnInt();
    
        3
  •  0
  •   Cory Kramer    7 年前

    这个 const 限定符意味着变量是不可变的,不能更改其值。第一个错误是告诉您变量未初始化。

    cin 允许您为变量赋值,这会立即与您的 常数

        4
  •  0
  •   frslm    7 年前

    您必须初始化 quantity 你申报的那一刻。此外,以后不能给它赋值;毕竟,它是恒定的。

        5
  •  0
  •   Brighter side user295691    7 年前

    const 第一个源中的符号。 第二个a 因此,您应该将代码放在下面

     int value;
     cin >> value;
     const int my_num = value;