C++编程错误:"{"标记之前的预期unqualified-id

smi*_*mba 0 c++ compiler-errors token

我是C++的新手,我正在尝试制作一个"计算器":添加两个数字,减去两个数字,乘以两个数字,除以两个数字,取一个数字的正弦,取一个数字的余弦,或者取一个数的正切值.这是代码:

#include <iostream>;
#include <cmath>;
#include <string>
int main () 
{}
int ask(std::string operation);
    {
        std::cout<<"Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n";
        std::cin>>operation;
            if (operation="Addition") 
            {
                goto Add
                                }
    float Add(float addend1, float addend2, float answer) 
    {
    Add:
        std::cout<<"Insert the first number to be added:\n";
        std::cin>>addend1;
        std::cout << "Insert the second number to be added:\n";
        std::cin>>addend2;
        answer=addend1+addend2;
        std::cout<<addend1<<"+"<<addend2<<"="<<answer<<"\n";
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

稍后会有更多功能,但我的问题在第7行.有一个错误说明:在"{"标记之前的预期unqualified-id.我知道我的缩进很糟糕,但谢谢!

Ed *_* S. 8

您的代码中存在很多问题.

首先,正如Ivan指出的那样,您正在尝试在函数内部定义函数(ask()内部main()).那是无效的.

其次,你有一个goto(为什么?!)试图跳转到另一个函数的标签.我怀疑你的编译器是否会允许这样做,但是你希望它如何工作呢?您正在尝试使用传递给函数的变量,这些变量addition不存在,因为您从未调用该函数,并且从未为其设置过堆栈.这很糟糕,不要这样做,只需正确调用该功能即可.

第三,#include预处理程序指令以换行符结束,而不是分号.这可能会导致一些(相对)难以追踪编译错误.

第四,你错误地尝试分配const char* "Addition"operation时你的意思来使用是平等的运营商==.但这不会起作用,因为它operation是一个r值,不能像那样分配.如果你想修改它,你需要将它声明为一个指针,但再一次,这不是你在语义上的意义......

如果你想比较字符串和(无论出于何种原因......)意图使用指向char的指针,那么你应该使用strcmp.也就是说,你在C++的土地,所以只需使用std:string.

尝试这样的事情.无论如何我还没有增强你的代码,只是做了一些可以编译和运行的代码.我做了一些改变.

除了摆脱一些语法错误之外,您的原始Add函数将结果作为float参数.从函数中分配给它只会修改副本.如果希望调用者看到修改后的值,则需要使用指针或引用,但根本不需要它,因为您只需返回结果即可.

字符串比较区分大小写,因此您可能希望将其更改为不区分大小写.我假设没有本地化:) 我也没有对输入执行错误检查,因此请注意,如果用户输入的内容不是有效的浮点数,它可能会失败.

#include <iostream>
#include <string>

using namespace std;

void Ask();
float Add( float, float );

int main( size_t argc, char* argv[] )
{
    Ask();
    return 0;
}

void Ask()
{
    cout << "Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n";

    string operation;
    cin >> operation;

    if( operation == "Addition" )
    {
        float first = 0, second = 0;
        cout << "enter first operand";
        cin >> first;

        cout << "enter second operand";
        cin >> second;

        cout << "The result is: " << Add( first, second );
    }
}

float Add( float first, float second ) 
{
    return first + second;
}
Run Code Online (Sandbox Code Playgroud)


Iva*_*lov 6

С++不允许嵌套函数.你有功能,main()并试图在其中声明功能ask().编译器不知道你想要什么.