我的计算器程序有误C++

I've got an error for my calculator program C++

本文关键字:C++ 程序有误 计算器 我的      更新时间:2023-10-16

我试图为我的第一个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"documentsvisual studio 2013projectsconsoleapplication1consoleapplication1calculator.cpp(12): error C2365: 'yn' : redefinition; previous definition was 'function'
1>          c:program files (x86)microsoft visual studio 12.0vcincludemath.h(1002) : see declaration of 'yn'
1>c:users"my account"documentsvisual studio 2013projectsconsoleapplication1consoleapplication1calculator.cpp(56): error C2059: syntax error : '>>'
1>c:users"my account"documentsvisual studio 2013projectsconsoleapplication1consoleapplication1calculator.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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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.0vcincludeistream(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"documentsvisual studio 2013projectsconsoleapplication1consoleapplication1calculator.cpp(63): error C2659: '=' : function as left operand
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

如果你能试着解释一下答案,这样我就可以从中学习了,因为这是我的第一个项目

  1. int yn;

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

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

重命名yn

  • case >> 5:错误,更改为case 5:

  • if (yn = 1)将始终是true,因为它是赋值操作而不是比较操作(==)。重写为if (yn == 1)

  • 根据错误信息,您的<cmath>定义(或包含定义)称为yn的东西。

    由于您将std::内部的所有内容都拉到全局命名空间(与using namespace std;一起),因此您自己的ynstd::中的yn发生冲突。

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

    让我们来看看编译器的输出。

    calculator.cpp(12): error C2365: 'yn': redefinition;之前的定义是'function'
    includemath.h(1002):参见'yn'的声明

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

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

    这只是说语法不正确,这是正确的。拿着那些<<从你的上一个"案例"中,让它看起来像你之前做过的每一个案例。案例5:"这可能只是你的一个简单的打字错误。

    calculator.cpp(61): error C2679: binary '>>':找不到右操作数类型为'double (__cdecl *)(int,double)'的操作符(或者没有可接受的转换)

    我认为这也是"yn"重新定义的结果,它将"yn"视为您不希望它成为的东西,并且在其上使用>>运算符没有意义。例如,您可能知道,您将在字符串上使用它。

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

    calculator.cpp(63): error C2659: '=': function为左操作数

    将赋值操作符(=)误认为比较操作符(==)。前者像您一直在做的那样赋值,而后者产生一个布尔值"真"或"假",用于(例如)if语句。您需要后者,因此将"="替换为"=="。

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