我绝对是一个绝望的案例......使用C ++,我已经定义了这两个类:
// Console.hpp
#ifndef CLASS_Console
#define CLASS_Console
#include <iostream>
#include "Window.hpp"
class Console
{
public:
Window *Win;
Console(Windows *Win); // Which then does "this->Win = Win;"
void AppendText(std::string);
// And some more dozens functions
};
#endif
// Window.hpp
#ifndef CLASS_Window
#define CLASS_Window
#include <iostream>
#include "Size.hpp"
class Window
{
private:
Console *m_Console;
public:
Window(); // Which then does "m_Console = new Console(this); m_Console->AppendText("YEAH");"
Console *getConsole(); // For use by another classes
Size getSize();
// And some more Tens and Tens of functions
};
#endif
首先,人们会说:“使用前瞻声明!”
但是鉴于我需要访问这些功能中的一些(在一种方式和另一种方式中),有什么办法可以避免使用前向声明吗?
感谢您(未来)的答案!
答案 0 :(得分:5)
但是鉴于我需要访问这些功能中的一些(在一种方式和另一种方式中),有什么办法可以避免使用前向声明吗?
我不确定你明白前方声明的作用。您只需要在window.hpp
中为Console
提供一个转发声明,然后在console.hpp
中加入window.cpp
。
答案 1 :(得分:3)
不,没有办法避免(至少是)前方声明。
但鉴于我需要访问这些功能中的许多功能
这为什么重要?性能?你有什么测量吗?如果没有,你就不能谈论表现。
答案 2 :(得分:1)
正常结构是:
class Console;
class Window { Console *c; ...};
class Console { Window *w; ... };
Console::Console() { ... } ...
第一个类声明足以让你编写另一个类的定义(没有成员函数的定义)。
然后在两个类的定义之后,声明了成员函数,因此成员函数的代码可以根据需要使用其他类的成员。
答案 3 :(得分:0)
如果只需要从“外部”设计访问这些类中的一个,您可以考虑在Window内嵌套控制台(或反过来)