在字符函数中传递字符值的奇怪错误

时间:2017-11-06 02:56:42

标签: c++

我正在尝试检查输入字符是否是字符。然后,我有一个函数,如果它是小写,它使它成为一个大写字符。但是出于某种原因,在编译时,当我在main函数中调用我的大写函数时,我得到一个奇怪的错误“无法将参数1从'char'转换为'std :: ios_base&'。究竟是什么' ios_base&' (我假设ios_base&)是某种引用地址。这是代码:

#include <iostream>
using namespace std;

int main() {

    char userChar;
    cout << "Please enter a char to be converted to capital: " << endl;
    cin >> userChar;

    if ((userChar >= 'a' ) && (userChar <= 'z')) {
        char upperCaseChar = uppercase(userChar);
        cout << "Character capitalized is " << upperCaseChar << endl;
    }
    else if (isupper(userChar)) {
        cout << "Character is already capitalized and is " << userChar << endl;
    }

    system("pause");
    return 0;
}

char uppercase(char ch) { 
        return ch - 'a' + 'A'; 

}

这是一个简单的程序,我正在写它,因为我必须把它翻译成汇编。谢谢!

2 个答案:

答案 0 :(得分:2)

你必须在调用之前声明一个函数。在main之前添加此行:

char uppercase(char ch);

或将整个uppercase函数移至main之前。

这很好地说明了为什么不建议using namespace stdstd中有很多内容,包括std::uppercase。出现错误消息的原因是,在您致电uppercase(userChar);时,uppercase唯一可见的定义为std::uppercase,需要std::ios_base参数。

您稍后再调用另一个未声明的函数isupper。如果您的意思是std::isupper,那么您需要#include <cctype>

答案 1 :(得分:1)