C4018:类内有符号、无符号不匹配

Posted

技术标签:

【中文标题】C4018:类内有符号、无符号不匹配【英文标题】:C4018: Signed,unsigned mismatch inside a class 【发布时间】:2020-06-28 21:56:41 【问题描述】:
class SchoolManagementSystem

private:
       vector<Student> S;
       vector<Course> C;
public:
       SchoolManagementSystem();

       int getNumberOfStudents() const;
;
SchoolManagementSystem::SchoolManagementSystem() : S(), C() 


int SchoolManagementSystem::getNumberOfStudents() 
const

    int numberOfStudents = 0;
    for ( int i = 0; i < S.size(); i ++)
        numberOfStudents ++;
    return numberOfStudents;

我正在与一个展示学校管理系统的班级合作。 (除此之外,我还有一些学生和课程课程) 事情就在这一行:for (int i = 0; i ,我收到一个错误 warning C4018: '。这是什么错误?它会影响我的结果吗?我该如何解决?

【问题讨论】:

顺便说一句:为什么不return (int)S.size() 是的,我会这样做的!谢谢 【参考方案1】:

std::vector::size() 函数返回一个size_t 类型,它是unsigned 类型。因此,在比较 i &lt; S.size() 时,您将 (signed) intunsigned 值进行比较。

只需将您的 for 循环索引声明为 size_t 变量:

for (size_t i = 0; i < S.size(); i++)
//...

大多数情况下,您的比较不会有问题;但最好不要忽略此类警告,因为它们会在您最不期望的时候跳起来并“咬你一口”。

【讨论】:

以上是关于C4018:类内有符号、无符号不匹配的主要内容,如果未能解决你的问题,请参考以下文章

[C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]

[C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]

[C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]

[C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]

Java不提供无符号整数类型?谢谢

C中溢出后有符号和无符号的不一致相等