【发布时间】:2018-08-26 07:19:17
【问题描述】:
我正在尝试将以下两个类分开,以便每个类都可以在其自己的 Header 中定义:
#include <iostream>
class Boo;
class Foo
{
public:
Foo(Boo *booPtr)
:booPtr(booPtr){};
virtual ~Foo(){};
Boo *booPtr;
};
class Boo
{
public:
Boo()
:foo(this){};
virtual ~Boo(){};
Foo foo;
int num = 32;
};
int main()
{
Boo *boo = new Boo;
std::cout << "booPtr : " << boo->foo.booPtr->num << '\n';
delete boo;
}
结果:
booPtr : 32
Program ended with exit code: 0
这是我失败的分离尝试:
"Foo.hpp"
#ifndef Foo_hpp
#define Foo_hpp
#include <stdio.h>
#include "Boo.hpp"
class Foo
{
public:
Foo(Boo *booPtr)
:booPtr(booPtr){};
virtual ~Foo(){};
Boo *booPtr;
};
#endif /* Foo_hpp */
"Boo.hpp"
#ifndef Boo_hpp
#define Boo_hpp
#include <stdio.h>
#include "Foo.hpp"
class Boo
{
public:
Boo()
:foo(this){};
virtual ~Boo(){};
Foo foo; // Error : Field has incomplete type 'Boo'
int num = 32;
};
#endif /* Boo_hpp */
"main.cpp"
#include <iostream>
#include "Foo.hpp"
#include "Boo.hpp"
int main()
{
Boo *boo = new Boo;
std::cout << "booPtr : " << boo->foo.booPtr->num << '\n';
delete boo;
}
但我无法构建代码,因为它会生成以下错误:
Boo.hpp -> Foo foo; -> "字段的类型不完整 'Boo'"
如何修复我的代码?
【问题讨论】:
-
1) 您的代码存在循环包含 (related) 2) 前向声明。 (正如第一次尝试所做的那样)。
标签: c++ class header-files circular-dependency forward-declaration