输入以下代码后,我会收到错误。
const int quantity;
cout << "How much spacing do you want in-between the frames? " ;
cin >> quantity;
错误:未初始化的const&#39;数量&#39; [ - fpermissive]
错误:&#39;运算符&gt;&gt;&#39;
的模糊重载
如果我只使用 int
类型,则不会发生这种情况int quantity;
cout << "How much spacing do you want in-between the frames? " ;
cin >> quantity;
哪个编译没有问题。我是C ++的新手,所以我只是想知道为什么会这样。
答案 0 :(得分:7)
如果将变量定义为
const int quantity;
你说“我想要一个名为int
的{{1}},在任何情况下我都不希望它的价值发生变化。”结果,如果你再写
quantity
编译器说了一些“等待 - 你希望我通过用用户输入的内容替换它来改变cin >> quantity;
的值,但早些时候你说你从来没有想过要我改变它!”
我的感觉是,你想要这样做,以便在给quantity
的初始值后,该值永远不会改变,但是对于quantity
变量,当变量是变量时需要设置初始值创建。因此你可以尝试这样的事情:
const
用于读取并返回const int quantity = readValue();
值的某个函数readValue()
。这样,编译器看到int
被赋予固定值,它知道该值永远不会改变,并且您永远不会尝试直接quantity
到cin
的值。
有关您所遇到的错误的更多技术观点:编译器读取时
quantity
没有赋值给它,它报告了一个错误,因为创建一个常量而不给它一个值是不常见的。 (我可以从你的代码中看到你意味着给它一个值,但你做它的方式不合法,编译器没有将这两个东西拼凑在一起)。关于const int quantity;
的第二个错误是因为您无法从operator >>
读取内容(阅读字符串,阅读cin
,阅读int
等)。 )应用,因为他们每个人都认为他们可以获得有关价值的可变(可修改)视图。同样,这两个问题都源于这样一个事实,即编译器将您的代码视为两个独立的独立错误而不是一个大的“oops,而不是char
如何工作”错误。
答案 1 :(得分:1)
您可以在声明时将const
局部变量初始化一次。您的示例看起来似乎无法工作,但如果您添加一个间接级别,则很简单。
int ReadAnInt()
{
int temp;
cin >> temp;
return temp;
}
const int quantity = ReadAnInt();
答案 2 :(得分:0)
const
限定符表示变量是不可变的,您无法更改其值。第一个错误告诉您该变量是未初始化的。
cin
允许您为变量指定一个值,该变量会立即与您的const
限定符相矛盾。
答案 3 :(得分:0)
您必须在声明时初始化quantity
。此外,您以后不能为其分配值;毕竟,它是不变的。
答案 4 :(得分:0)
首先,您将相同的代码放在两个框中。
我承认你将const
符号放在第一个来源中。
其次,必须在C ++中声明初始化const
。
因此,您应该将代码放在以下
int value;
cin >> value;
const int my_num = value;