C++ C4244 =': 从 'std::streamsize' 到 'unsigned short' 的转换,可能会丢失数据;任何解决方案?

C++ C4244 =': conversion from 'std::streamsize' to 'unsigned short', possible loss of data; any solution?

我是 C++ 的新手,刚学完 类。我不知道为什么我一直收到此错误 C4244(检查标题)。 我正在使用 Visual Studio 2017 反馈将不胜感激。

//我的程序要求用户输入一个句子 `

#include <iostream>
using namespace std
Const short MAX = 132;

class information
{
char sentence[MAX];
short gcount;
public:
    unsigned short CharCount;
    void InputData();
    void showresult();
};
Int main()
{
    Information data;
    data.InputData();
    data.showresult();
    return 0;
}

void information::InputData()//member function to enter info
{
    cin.ignore(10, '\n');
    cout << "Enter your sentence " << endl;
    cout << endl;
    cin.getline(sentence, sizeof(sentence));
    CharCount = cin.gcount(); // this is the problem

}

void information::showresult() //show number of characters
{
    cout << " Characters in the sentence:: " << CharCount  << endl; 
    system(“Pause”);
}

`

该警告告诉您您正在尝试存储的值对于您尝试放入的容器来说可能太大了。cin.gcount() returns [=] 类型的值11=]。这通常是带符号的 64 位(或 32 位)数字。 CharCount 是一个 unsigned short,通常是 16 位。

实际上,您正在尝试将带符号的 64 位值存储到无符号的 16 位值中,编译器对此不满意。您也应该将 CharCount 更改为 std::streamsize 类型。

或者,正如 user253751 所建议的那样,由于您知道它将是一个小尺寸 (132),您可以转换为 unsigned short.