在A类的构造函数中构造B的对象

时间:2012-09-10 03:27:12

标签: c++ gcc

这是我想要做的,我希望A类的构造函数为B的对象调用B&#39的构造函数,就像这个main() - &gt; A-&gt; B < / p>

A.cpp :(包括B.h)

A::A(){
  B foo;
}

B.h:

class B{
 B(){//some code};
};

但是GCC不会编译,并说 A :: B foo有初始化程序但是类型不完整 。我猜测编译器在A中没有定义B的本地类,所以它抱怨并且不知道B类来自另一个文件。我的问题是如何在上面的A构造函数中构造一个B对象。我相信我缺少一些关于C ++的基础知识,请耐心等待。提前谢谢。

2 个答案:

答案 0 :(得分:2)

尝试

class A
{
    public:
        A();  // Don't define A::A() here
              // As the compiler has not seen B
};
class B
{
    public:
        B() {}
};
// At this point both classes have been seen
A::A()
{
    ::B foo;  // So now you can use B
              // Note I am using ::B here
              //      As the error message suggests that you have some class B defined
              //      Within A which is confusing it. the prefix :: means take the class
              //      B from the global scope rather than a closer scope.
}

答案 1 :(得分:1)

您没有类型A::B的任何类。从您的评论中,您似乎试图通过调用B来使用指向A::B *的指针。这是不正确的。指向B的指针始终为B *,无论它出现在何处。根据你的说法,看起来你想要这样的东西:

a.hpp

#ifndef A_HPP_
#define A_HPP_

class B;
class A {
public:
    A(B * b);
private:
    B * my_very_own_b;
};

#endif    // A_HPP_

a.cpp

#include "a.hpp"
#include "b.hpp"

A::A(B * b):
    my_very_own_b(b)
    {
}

b.hpp

#ifndef B_HPP_
#define B_HPP_

class B {
public:
    B();
private:
    int x;
};

#endif    // B_HPP_

b.cpp

#include "b.hpp"
B::B():
    x(0)
    {
}

的main.cpp

#include "a.hpp"
#include "b.hpp"

int main() {
    B b;
    A a(&b);
    return 0;
}