我刚开始在Mac上自学C ++,我遇到了一些问题。
我编写了一些允许用户输入数字的代码,当他们点击输入时,该数字将返回给用户。
Xcode绝对不会拥有它。每次我尝试运行我的代码时,都会说cin>> thisisanumber;
代码存在问题。
错误出现并说
Invalid operands to binary expression.
错误在第10行。
我做错了什么?
#include <iostream>
using namespace std;
int main()
{
int thisisanumber();
cout << "Please enter a number: ";
cin >> thisisanumber;
cin.ignore();
cout << "You entered"<< thisisanumber <<"\n";
cin.get();
}
答案 0 :(得分:9)
您已成为most vexing parse的受害者,这意味着thisisanumber
被视为一项功能。拿出括号,你应该没事:
int thisisanumber;
还要考虑使其更具可读性,例如thisIsANumber
。如果您需要了解它,thisIsANumber
使用 camel-case 命名约定。
答案 1 :(得分:2)
声明你的变量没有括号,比如
int thisisanumber;
使用括号,它被解释为函数,函数不能作为参数传递给>>
运算符。
答案 2 :(得分:2)
你的问题就是所谓的most vexing parse。基本上所有可以解析为函数声明的东西都将被解析。因此,编译器会将int thisisanumber();
解释为函数thisisanumber
的声明,它接受零参数并返回int
。如果你考虑这种行为,cin>>thisisanumber;
的问题应该是有些自我意识的。
如果删除了parantheses,将变量声明更改为int thisisanumber;
,那么您的程序应该表现得与thisisanumber
int
类型的变量一样。
然而,您可能会重新考虑您的命名约定,thisisanumber
并不完全可读。我建议您使用this_is_a_number
,thisIsANumber
或ThisIsANumber
。
答案 3 :(得分:1)
int thisIsANumber;
尝试将其声明为变量,因为您编写的内容已被解释为函数。
答案 4 :(得分:0)
在thisisanumber
之后删除(),因为thisisanumber
之后的()表示它是一个函数,当它不是时。