我知道,有很多这样的问题。如何检查指针是否为NULL。
我在国内外进行了研究,找到了一些不错的答案,但显然它们对我没有用。

我有这个结构:

myModule.h

class myModule
{
  public:
    myThing *in;
    myThing *out;

    virtual ~myModule() {}
    virtual myModule& bind(myModule &m) = 0;
};


myThing.h

class myThing
{
  public:
    myThing() {}

    node *get_node() { return &n; }

    signal *get_signal() { return &s; }

  private:
    node n;
    signal s;
};


mySubModule.h

class mySubModule : public myModule
{
  public:
    virtual ~mySubModule() {}
    virtual myModule& bind(myModule &m)
    {
      // Here comes the 'checkpoint'
      if(!in)
         in = new myThing();
      in.doSomething();
    }
};


myObject.h

class myObject : public mySubModule
{
  // This is the 'real' object that will call 'bind'
};


因此,当它通过“检查点”时,它始终指向某物,因此它永远不会进入“ if”内部。我猜想它与继承有关,因为编译器不知道什么是myThing或什么,但是使“检查点”正常工作将非常好。我尝试将myThing *in, *out初始化为NULL,但无法正常工作。

另外,由于myModule功能,接口virtual可能存在问题。我不确定那是正确的。可能是原因吗?

如果有人提出了一个主意,那就太好了。

编辑

我刚意识到有错字。 “检查点”是错误的,它是if(!in)而不是if(!myThing)

我使用此检查点的目的是检查对象(myThing *in)是否为NULL。如果它是NULL,我将对其进行初始化。如果不是,我会用它。

我已经尝试过了:

class myModule
{
  ...
  myModule()
  {
    in  = NULL;
    out = NULL;
  }
  ...
}


但这对我不起作用。 if(!in)if(in == NULL)返回false

我应该在myObject构造函数中初始化它吗?我不能在父构造函数中执行此操作吗?

非常感谢 :)

最佳答案

您需要在构造函数中初始化in,out。

顺便说一句,if(!myThing)甚至不会在任何地方声明或定义myThing时进行编译。

10-05 22:17