有没有办法可以创建一个驻留在另一个类中的类的实例?

时间:2014-02-23 22:43:14

标签: c++

有没有办法可以创建一个驻留在另一个类中的类的实例? 例如:

class foo
{
public:
    foo()
    {
        //Constructor stuff here.
    }

    class bar
    {
       bar()
       {
           //Constructor stuff here.
       }
       void action(foo* a)
       {
           //Code that does stuff with a.
       }
    }

    void action(bar* b)
    {
        //Code that does stuff with b.
    }
}

现在我只想在main()中创建一个bar实例,如下所示:

foo* fire;
bar* tinder;

但是在此范围内未声明bar。我在类中使用类的原因是因为它们都使用将另一个类作为参数的方法,但我需要main()中每个类的实例。我该怎么办?

5 个答案:

答案 0 :(得分:2)

  

现在我只想在main()...

中创建一个bar实例

这就是你要做的:

int main()
{
  foo::bar tinder;
}

barfoo范围内声明。目前尚不清楚为什么会这样,所以除非你有充分的理由,否则不要使用嵌套类。另请注意,您尝试声明指向foofoo::bar的指针,而不是实例。

答案 1 :(得分:2)

您可以使用范围解析运算符:foo::bar* tinder;。这将为您提供指向bar而非bar对象的指针。如果你想要,你应该foo::bar tinder

但是,您没有充分的理由使用嵌套类。你应该把一个放在另一个之前然后使用前向声明。类似的东西:

class foo; // Forward declares the class foo

class bar
{
   bar()
   {
       //Constructor stuff here.
   }
   void action(foo* a)
   {
       //Code that does stuff with a.
   }
};

class foo
{
public:
    foo()
    {
        //Constructor stuff here.
    }

    void action(bar* b)
    {
        //Code that does stuff with b.
    }
};

答案 2 :(得分:1)

类栏在类foo的范围内声明。所以你必须写

foo::bar* tinder;

你也忘了在类bar和foo的定义之后放置分号。:)

答案 3 :(得分:1)

嵌套类在另一个类的范围内声明。 因此,要从main中使用它们,您需要告诉编译器在哪里找到该类。

以下是语法:

foo::bar *tinder;

foo是父作用域,bar是嵌套类。

希望有所帮助

答案 4 :(得分:0)

你想要的是一个所谓的“嵌套类”。

您可以在此处找到您想要了解的所有内容:Why would one use nested classes in C++?

e.g:

class List
{
    public:
        List(): head(NULL), tail(NULL) {}
    private:
        class Node
        {
          public:
              int   data;
              Node* next;
              Node* prev;
        };
    private:
        Node*     head;
        Node*     tail;
};