В вашем коде много проблем.
Во-первых, как указывает Иван, вы пытаетесь определить функцию внутри функции (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;
}