'operator =='不匹配,将对象与NULL进行比较

时间:2016-01-09 23:55:15

标签: c++

您好我的当前项目有问题。 我在编译器上收到以下错误: 错误:'operator =='不匹配(操作数类型为'Post'和'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(?)的long int进行比较,是有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

NULL(更具体地说,nullptr)是指针的有效值。声明对象数组时,在创建数组的过程中,所有对象都将默认为您构造。因此,总是构造所有posts[i]

如果要创建仅部分填充的数组,请使用指针数组和运算符new来创建对象。

更好的是,使用std::vector<Post>并根据需要插入尽可能多的对象。这样您就不必检查对象是否已初始化,并使用迭代达到数组的大小。

答案 1 :(得分:2)

我猜你有类似的东西:

Post posts[100];

(好吧,如果您真的发布了代码会很好,所以我们不必猜测。)

您可以这样做:

std::unique_ptr<Post> posts[100];

这与你已经拥有的最接近,但有点奇怪。

您也可以使用std::vector,并且永远不要为帖子使用null,例如:

std::vector<Post> posts;

posts.push_back(Post{title, creator});

但是你需要学习指针类型和非指针类型之间的区别。

P.S。这些天你应该使用nullptr而不是NULL