c++ - clang ++ 构建失败,但 gcc 构建成功
问题描述
我正在学习C++。下面是一个简单的演示。我可以在 MacOS 上使用 gcc-10.2 成功编译,但 clang-12.0 失败
class Person{
public:
string name;
int sex;
int age;
Person(string name, int sex, int age){
this -> name = name;
this -> sex = sex;
this -> age = age;
}
public:
bool operator==(const Person &person)
if ((name == person.name) && (sex==person.sex) && (age=person.age)){
return true;
}else{
return false;
}
}
};
int main()
{
vector<Person> v;
v.push_back(Person("tom",1,20));
v.push_back(Person("tom",1,20));
v.push_back(Person("jessei",0,21));
vector<Person>::iterator it = adjacent_find(v.begin(),v.end());
cout << it->name<<":" << it->age<<":" << it-> sex << endl;
return 0;
}
这是错误日志:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:678:71: error: invalid operands to binary expression
('const Person' and 'const Person')
bool operator()(const _T1& __x, const _T1& __y) const {return __x == __y;}
解决方案
源代码有几个错误,但我觉得还是让你自己发现和改正比较好。
回到您的问题,您在 operator== 之后错过了一个 const。
bool operator==(const Person &person) const {
return xxx;
}
一个更好的可能会添加 constexpr 和 noexcept (对于现代 c++)。
constexpr bool operator==(const Person &person) const noexcept {
return xxx;
}
推荐阅读
- css - angular.json css 样式设置和组件 css 设置之间的冲突
- ios - Swift:添加项目时更改 UICollectionView 中单元格布局的宽度
- neo4j - 删除 neo4j 中的 MIN 计数数据
- java - 反应式 - 混合阻塞和异步请求
- c# - 如何等待场景卸载?
- angular - 为什么 HTTP 请求以代码 500 完成时 *finalize* 运算符不起作用
- jestjs - 在单个测试套件中独立运行多个测试用例,无需重新启动应用程序
- r - 重新排列数据表中的列会影响 R 中的其他变量
- c++ - “删除”的转义序列
- json - 如何在可编码解码过程中处理空数组