您好我的当前项目有问题。 我在编译器上收到以下错误: 错误:'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进行比较,是有办法解决这个问题吗?
答案 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
。