“operator==”没有匹配项,正在将对象与NULL进行比较
no match for ‘operator==’, comparing object to NULL
你好,我当前的项目有问题。我在编译器上得到以下错误:错误:"operator=="不匹配(操作数类型为"Post"answers"long int")if(posts[i]==NULL)
关于以下功能:
bool Thread::createPost(const string& title, const string& creator) {
for (int i = 0; i < 100; i++) {
if (posts[i] == NULL) {
posts[i] = new Post(title, creator);
post_number++;
return true;
}
}
return false;
}
因此,我试图检查下一个对象是否已经创建,如果没有,则创建一个新对象。显然,我正在将"Post"类的对象与NULL(?)的长int进行比较,有办法解决这个问题吗?
NULL
(更具体地说,nullptr
)是指针的有效值。当您声明一个对象数组时,作为创建数组过程的一部分,所有对象都将默认为您构建。因此,所有的posts[i]
总是被构造的。
如果要创建仅部分填充的数组,请使用指针数组和运算符new
来创建对象。
更好的是,使用std::vector<Post>
并根据需要插入尽可能多的对象。这样,您就不必检查对象是否已初始化,并使用迭代直到数组大小。
我猜你有这样的东西:
Post posts[100];
(好吧,如果你真的发布了代码,那就太好了,所以我们不必猜测。)
你可以这样做:
std::unique_ptr<Post> posts[100];
这是最接近你已经拥有的,但有点奇怪。
你也可以只使用std::vector
,并且永远不要在你的帖子中使用null,比如:
std::vector<Post> posts;
posts.push_back(Post{title, creator});
但是您需要了解指针类型和非指针类型之间的区别。
附言:这些天你应该用nullptr
而不是NULL
。
相关文章:
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- C++ <algorithm> 使用对象作为比较定义的 sort()
- C++,如何使用常量对象和非常量对象进行比较?
- 绘制一个对象,比较模具缓冲区的两个不同值
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- 访问类对象以与全局变量进行比较
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 为什么地图需要实现'operator<'以及如何比较对象?
- 如何使用std::lower_bound比较对象变量,而不使用第二个对象进行比较
- std::用派生类对象设置,但用gcc8.1设置基类比较器
- 尝试使用比较运算符对对象向量进行排序
- 可作为常量调用的比较对象
- 在 MSVC 中,从 std::string_view 派生的对象比较不明确
- 如何改进我的"String"对象比较功能
- 重载对象成员的比较运算符
- 如何为C++映射创建自己的字符串比较对象
- 为什么使用 and 运算符比较 if 语句中的 2 个对象会抛出错误,而使用 2 if 语句则不会
- c++:旋转锁或互斥对象比较(简单计算)
- 继承中的对象比较
- 使用自定义函数对象比较器 c++ 设置