“operator==”没有匹配项,正在将对象与NULL进行比较

no match for ‘operator==’, comparing object to NULL

本文关键字:对象 比较 NULL operator      更新时间:2023-10-16

你好,我当前的项目有问题。我在编译器上得到以下错误:错误:"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