错误 'LC_TYPE' 未在此范围内声明

Error 'LC_TYPE' was not declared in this scope

我正在用 C++ 编写程序,应该将文本中的字母更改为大写字母(程序可以运行,但 setlocale 不运行)。但它给了我错误。 [错误] 'LC_TYPE' 未在此范围内声明。它 "should" 有效,因为它来自我的官方教员文献。

#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Write something: " << endl;
string tekst; //tekst=text
getline(cin, tekst);

setlocale(LC_TYPE, "croatian"); // here is problem...

for (char znak : tekst){  //znak=char, symbol...
    char velikoSlovo = toupper(znak); // velikoSlovo=uppercaseLetter
    cout << velikoSlovo;
}
cout << endl;   
return 0;
}

有人知道如何解决这个问题吗?? 我正在使用 Orwell Dev C++ 5.9.2。语言标准 (-std) 是 ISO C++ 11。 Here is picture.

难道你不需要包括 #include <clocale> 据说 here

编辑: 实际上 #include <locale.h> 应该优于 <clocale> 以减少可移植性问题。感谢@Cheers 在评论中提到它。

如文档所述,您应该使用 LC_CTYPEhttp://www.cplusplus.com/reference/clocale/setlocale/

您还需要提供有效的语言环境代码,as described here

所以对于 chroatian,你的行应该是这样的:

setlocale(LC_CTYPE, 'hr_HR.UTF-8'); // or just "hr_HR"

或者您可以只使用:

setlocale(LC_ALL, "")

应该将本地化设置为您的计算机使用的默认语言环境。

并且如前所述,您可能还需要添加 #include <clocale>

添加

#include <locale.h>

获取 setlocale 及其相关常量的声明。

一般来说,只要阅读编译器似乎无法识别的任何函数或相关事物的 relevant documentation


一般来说,所选方法可能适用于面向单字节的编码,但不适用于 UTF-8 等多字节编码。 Windows中常用单字节编码。在 Unix 领域,它是 UTF-8 规则。

而对于 Windows,您通常需要系统的默认语言环境,因此而不是

setlocale(LC_TYPE, "croatian");

您可能(但不一定,但很有可能)得到

更好的服务
setlocale(LC_ALL, "");

其中空字符串选择系统区域设置而不是默认的纯 ASCII "C" 区域设置。


此外,请注意 C 库中的 toupper 需要非负参数,否则需要特殊值 EOF。当您知道它不是 EOF.

时,您可以将参数转换为 unsigned char