【问题标题】:I've got an error for my calculator program C++我的计算器程序 C++ 出错
【发布时间】:2015-07-14 19:11:42
【问题描述】:

我试图为我的第一个 C++ 项目制作一个计算器,但我遇到了一个错误。

这是我的代码:

#include <iostream>
#include <cmath>

using namespace std;

int a;
int b;
int sum;
int opp;
int yn;


int main()
{

    cout << "Enter your first value" << endl;
    cin >> a;

    cout << "Type the number that corrosponds to your opperation \n 1.add \n 2.subtract \n 3.mutipliy \n 4.divide" << endl;
    cin >> opp;

    cout << "Choose your last value" << endl;
    cin >> b;

    return 0;

}

int action()
{

    switch(opp)
    {
    case 1:
        sum = a + b;
        cout << "Your answer is " << sum << endl;
        break;

    case 2:
        sum = a - b;
        cout << "Your answer is " << sum << endl;
        break;

    case 3:
        sum = a * b;
        cout << "Your answer is " << sum << endl;
        break;

    case 4:
        sum = a / b;
        cout << "Your answer is " << sum << endl;
        break;

    case >> 5:
        cout << "Type the number that corrosponds to your opperation \n 1.add \n 2.subtract \n 3.mutipliy \n 4.divide"
    }

    cout << "Would you like to use another oppperation? \n Type the number that relates to the answer you want to choose \n 1.Yes \n 2.No" << endl;
    cin >> yn;

    if (yn = 1)
    {

    cout << "what would you like your nxt opperation to be? \n 1.add \n 2.subtract \n 3.mutiply \n 4.divide" << endl;
        cin >> opp;

        return 0;
    }
}

我知道这不是最好的编写代码,但我更专注于让它发挥作用。

如果它有助于我得到的错误代码是:

1>------ Build started: Project: ConsoleApplication1, Configuration: Debug Win32 ------
1>  calculator.cpp
1>c:\users\"my acount"\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\calculator.cpp(12): error C2365: 'yn' : redefinition; previous definition was 'function'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\math.h(1002) : see declaration of 'yn'
1>c:\users\"my account"\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\calculator.cpp(56): error C2059: syntax error : '>>'
1>c:\users\"my account"\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\calculator.cpp(61): error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'double (__cdecl *)(int,double)' (or there is no acceptable conversion)
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(485): could be 'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_streambuf<char,std::char_traits<char>> *)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(466): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(void *&)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(448): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(long double &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(430): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(double &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(411): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(float &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(392): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(unsigned __int64 &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(373): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(__int64 &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(353): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(unsigned long &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(335): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(long &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(317): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(unsigned int &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(291): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(int &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(272): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(unsigned short &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(237): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(short &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(218): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::_Bool &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(211): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::ios_base &(__cdecl *)(std::ios_base &))'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(204): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_ios<char,std::char_traits<char>> &(__cdecl *)(std::basic_ios<char,std::char_traits<char>> &))'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(198): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_istream<char,std::char_traits<char>> &(__cdecl *)(std::basic_istream<char,std::char_traits<char>> &))'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(1103): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><char,std::char_traits<char>,double(int,double)>(std::basic_istream<char,std::char_traits<char>> &&,_Ty (__cdecl &))'
1>          with
1>          [
1>              _Ty=double (int,double)
1>          ]
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(1093): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><std::char_traits<char>>(std::basic_istream<char,std::char_traits<char>> &,unsigned char &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(1086): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><std::char_traits<char>>(std::basic_istream<char,std::char_traits<char>> &,unsigned char *)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(1079): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><std::char_traits<char>>(std::basic_istream<char,std::char_traits<char>> &,signed char &)'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\istream(1072): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><std::char_traits<char>>(std::basic_istream<char,std::char_traits<char>> &,signed char *)'
1>          while trying to match the argument list '(std::istream, double (__cdecl *)(int,double))'
1>c:\users\"my account"\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\calculator.cpp(63): error C2659: '=' : function as left operand
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

如果您可以尝试解释答案,以便我可以从中学习,因为这是我的第一个项目。

【问题讨论】:

  • 命名空间冲突,一方面。永远将 using namespace std; 从你的编程词汇中剔除。
  • 开关中的默认值可能有助于让用户知道是否给出了不受支持的输入。您可以打印出错误消息。
  • 请注意,只有加法的结果是sum——你有一个命名问题。

标签: c++ syntax-error calculator


【解决方案1】:
  1. int yn;

这里你重新声明了yn,因为math.h已经有一个名为yn的变量:

extern double yn _PARAMS((int, double));

所以重命名yn

  1. case &gt;&gt; 5:错了,改成case 5:

  2. if (yn = 1) 将始终为true,因为它是一个赋值操作而不是比较操作符 (==)。改写为if (yn == 1)

【讨论】:

    【解决方案2】:

    根据错误消息,您的 &lt;cmath&gt; 定义(或包含定义)称为 yn 的东西。

    而且由于您将所有内容从 std:: 内部拉到全局命名空间(使用 using namespace std;),您自己的 ynyn 内部 std:: 发生冲突。

    解决方法:停止使用using namespace std;

    【讨论】:

      【解决方案3】:

      好吧,让我们看看编译器的输出。

      \calculator.cpp(12): 错误 C2365: 'yn' : 重新定义; 以前的定义是“功能”
      \include\math.h(1002) : 参见 'yn' 的声明

      第一行告诉我们已经有 'yn' 的定义 正在使用。那第二行 告诉我们在哪里:在您包含的 math.h 文件中。要解决此问题,请选择 main.cpp 文件中“yn”的另一个名称(或者您可以删除“using namespace std”行,并将“std::”附加到每次调用 cout 的开头等等,但我不认为你会知道在这个阶段到底发生了什么)

      \calculator.cpp(56):错误 C2059:语法错误:'>>'

      这只是说语法不正确,这是正确的。把那些

      \calculator.cpp(61): error C2679: binary '>>' : no operator found which take a right-hand operand of type 'double (__cdecl *)(int,double)' (或者没有可接受的转换)

      我相信这也是重新定义“yn”的结果,它把“yn”视为你不希望它成为的东西,而且>>运算符没有意义用在上面。例如,您可能知道在字符串上使用它。

      之后,它似乎列出了您可以使用它的所有方式,但在大多数情况下,这对您来说并不重要。

      \calculator.cpp(63): 错误 C2659: '=' : 函数作为左操作数

      在这里,您将赋值运算符 (=) 误认为比较运算符 (==)。前者像你一直在做的那样分配值,后者产生一个布尔值“真”或“假”,用于例如 if 语句。您想要后者,因此将“=”替换为“==”。

      学习通读编译器的输出。它实际上说的是有用的东西,你只需要学会使用它。

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 2013-12-03
        • 2015-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多