非常基本的C ++程序问题 - 二进制表达式的操作数无效

时间:2012-07-23 21:00:44

标签: c++

我刚开始在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();
}

5 个答案:

答案 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_numberthisIsANumberThisIsANumber

答案 3 :(得分:1)

int thisIsANumber;

尝试将其声明为变量,因为您编写的内容已被解释为函数。

答案 4 :(得分:0)

thisisanumber之后删除(),因为thisisanumber之后的()表示它是一个函数,当它不是时。