2

我绝对处于绝望的境地......使用 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

一开始,有人会说:“使用前向声明!”

但是鉴于我需要访问这几十个函数中的一些(以一种方式和另一种方式),有什么方法可以避免使用前向声明?

感谢您的(未来)答案!

4

4 回答 4

5

但是鉴于我需要访问这几十个函数中的一些(以一种方式和另一种方式),有什么方法可以避免使用前向声明?

我不确定您是否理解前向声明的作用。您只需在for中提供一个前向声明,然后包含from 。window.hppConsoleconsole.hppwindow.cpp

于 2012-09-05T14:02:53.890 回答
2

不,没有办法避免(至少)前向声明。

但是鉴于我需要访问其中的几十个功能

为什么这很重要?表现?你测量过什么吗?如果没有,你就不能谈论性能。

于 2012-09-05T14:01:41.253 回答
1

正常的结构是:

  1. 声明第一类:class Console;
  2. 定义第二类:class Window { Console *c; ...};
  3. 定义第一类: class Console { Window *w; ... };
  4. 定义成员函数Console::Console() { ... } ...

第一个类声明足以让您编写另一个类的定义(没有成员函数的定义)。

然后在定义了两个类之后,声明了成员函数,所以成员函数的代码可以根据需要使用其他类的成员。

于 2012-09-05T14:16:29.540 回答
0

如果设计中只需要从“外部”访问这些类中的一个,则可以考虑将 Console 嵌套在 Window 内(或相反)

于 2012-09-05T14:07:15.440 回答