-1

这是我想要做的,我希望类 A 的构造函数为 B 的对象调用 B 的构造函数,例如 main()->A->B

A.cpp:(包括 Bh)

A::A(){
  B foo;
}

乙:

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

但 GCC 不会编译并说A::B foo has initializer 但不完整类型。我猜编译器在 A 中没有看到 B 的本地类,所以它抱怨并且不知道 B 类来自另一个文件。我的问题是如何在上面的 A 的构造函数中构造 B 的对象。我确定我缺少一些关于 C++ 的基础知识,请多多包涵。先感谢您。

4

2 回答 2

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.
}
于 2012-09-10T03:48:40.833 回答
1

您没有任何类型的类A::B。从您的评论来看,您似乎正在尝试B通过调用来使用指向它的指针A::B *。这是不正确的。指向的指针B总是B *,无论它出现在哪里。从您所说的来看,您似乎想要这样的东西:

一个.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)
    {
}

主文件

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

int main() {
    B b;
    A a(&b);
    return 0;
}
于 2012-09-10T03:43:27.057 回答