2015-11-01 2 views
-5

Я не могу понять, где указатель ошибочен в этом коде. Тем не менее, я получаю сообщение о том, что код не имеет указателя на функцию.C++ Передача локальной переменной

#include <iostream> 
using namespace std; 

char uppercase (char ch) { 
    if ((ch >= 'a') && (ch <= 'z')) { 
     return ch - 'a' + 'A' ; 
     cout << "Your capital letter is " << ch << endl; 
    } else { 
     return ch; 
     cout << "Your original letter is: " << ch << endl; 
    } 
} 


int main(int& ch){ 
    cout << "Please enter a lowercase letter between a to z: "; 
    cin >> ch; 
    char uppercase; 
    char outChar; 
    char inChar; 
    outChar = uppercase(inChar); 
    system("pause"); 
} 
+5

Вы знаете, что операторы 'return' немедленно возвращают функцию return *, любой код после' return' не будет выполнен. –

+2

Можете ли вы поделиться точной ошибкой, которую вы получаете, пожалуйста? – Mureinik

+1

int main (int & ch) должен быть int main() - вообще не нужно для аргументов. И я думаю, вы имели в виду cin >> inChar. Вам не нужен символ верхнего регистра в вашем основном корпусе.Он не используется локально и только путает компилятор. – davestevens

ответ

4
  1. int main(char&) является не строго в соответствии. Это может быть обеспечено реализацией, но я не знаю о какой-либо платформе, выполняющей это. В размещенной версии используйте вместо этого int main() или int main(int argc, char** argv).

  2. Построение на 1 й записки, объявить ch в функции в качестве локальной переменной и использовать char не int:

    char ch; 
    

    Или удалить его полностью, как описано в 4 го точка.

  3. Вы называете uppercase на неинициализированном переменном (inChar), что приводит к непредсказуемому поведению, потому что uppercase читает из него. Удалите переменную ch и используйте вместо этого cin на inChar.

  4. Возможно, вы должны обменять return ch; на cout -статье в функции uppercase. Значение cout - это мертвый код, то есть он никогда не будет выполнен, потому что функция возвращается заранее.

0

у вас есть локальная переменная с таким же именем, как имя функции: верхний регистр избавиться от локальной переменной также зафиксировать основную функцию на следующие подписи.

int main(int argc, char *argv[]) 
{ 
.... 
} 

ex: 

#include <iostream> 
using namespace std; 

char uppercase (char ch) { 
    if ((ch >= 'a') && (ch <= 'z')) { 
    return ch - 'a' + 'A' ; 
    } 
    else { 
    return ch; 
    } 
} 


int main(int argc, char* argv[]){ 
cout << "Please enter a lowercase letter between a to z: "; 

char inChar; 
cin >> inChar; 
char outChar = uppercase(inChar); 
return 0; 
} 
+3

Вы не можете просто использовать char * argv []? – djechlin

+1

действительно вы должны использовать 'char',' _TCHAR' доступен только в Windows. – Adam

+0

main (int & ch) определенно неверен. Если он скомпилируется, он сделает что-то неожиданное, так как ch не получит выделение памяти. – davestevens

0

я вижу довольно много проблем в вашем коде:

  1. Read Why System is evil. Короче говоря, использование системы («пауза») имеет тенденцию быть проблематичным. Существует много других способов остановить ваш код (например, другой cin).
  2. Как указано выше, общий способ открытия основной программы - использовать int main() или int main (int argc, char ** argv).
  3. Предположим, что ваш код работает ... Затем вы запрашиваете исполняемый ввод «ch», который после этого снова изменяется, снова запрашивая тот же ввод во время выполнения программы! Я предлагаю вам использовать пункт 2. и что сказал @cad.
  4. Настоящий ответ на вашу проблему! Вы используете как ввод в верхний регистр (char) переменную, которая не была заполнена «InChar», но символ, который вы заполняете с помощью пользовательского ввода, является «ch».

Надеюсь, это поможет.

Смежные вопросы