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 < S.size()
时,您将 (signed) int
与 unsigned
值进行比较。
只需将您的 for
循环索引声明为 size_t
变量:
for (size_t i = 0; i < S.size(); i++)
//...
在大多数情况下,您的比较不会有问题;但最好不要忽略此类警告,因为它们会在您最不期望的时候跳起来并“咬你一口”。
【讨论】:
以上是关于C4018:类内有符号、无符号不匹配的主要内容,如果未能解决你的问题,请参考以下文章
[C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
[C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
[C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]