这是我想要做的,我希望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 ++的基础知识,请耐心等待。提前谢谢。
答案 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;
}