C++ 与‘不匹配;运算符==’;,将对象与NULL进行比较

C++ 与‘不匹配;运算符==’;,将对象与NULL进行比较,c++,C++,你好,我对我当前的项目有问题。 我在编译器上遇到以下错误: 错误:“运算符==”不匹配(操作数类型为“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

你好,我对我当前的项目有问题。 我在编译器上遇到以下错误: 错误:“运算符==”不匹配(操作数类型为“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;
}
bool-Thread::createPost(常量字符串和标题,常量字符串和创建者){
对于(int i=0;i<100;i++){
if(posts[i]==NULL){
职位[i]=新职位(职位、创建者);
post_number++;
返回true;
}
}
返回false;
}
因此,我试图检查下一个对象是否已创建,如果未创建,则创建一个新对象。显然,我正在将“Post”类的对象与一个长int(NULL(?)进行比较,是否有方法解决此问题?

NULL
(更具体地说,
nullptr
)是指针的有效值。当您声明一个对象数组时,作为创建数组过程的一部分,所有对象都将默认为您构建。因此,所有的
post[i]
s都是构建的

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


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

我猜您可能有以下情况:

Post posts[100];
(好吧,如果你真的发布了代码就好了,这样我们就不用猜了。)

您可以这样做:

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

posts.push_back(Post{title, creator});
但是您需要了解指针类型和非指针类型之间的区别


<> P.S.您应该使用<代码> NulLPTR < /C> >而不是<代码> NUL>代码>这些天。

推荐的修复是不要尝试编写像C++一样的java。您的<代码>帖子变量看起来是什么样的?最好的猜测是
Post-posts[N]
即一个结构数组,而不是指向结构的指针。通过空检查和新的检查,您的意思可能是
Post*posts[N]
@Jaa-c,它是另一个类的成员。它是一个类的对象数组,在另一个类上声明。谢谢你的回答,是的,这正是我的答案,因为这是一个项目,我不允许使用std::vectorPS。你应该使用后置而不是推_back@LokiAstari:我试图在堆栈溢出的答案中保留微优化。因此,一旦我创建了数组,对象由默认构造函数创建,因此数组中填充了对象?@cyvous这是正确的,如果您创建的是对象数组,而不是指针,所有对象都是预先创建的。