基本 C++ 头文件问题

Posted

技术标签:

【中文标题】基本 C++ 头文件问题【英文标题】:Basic C++ Header File Question 【发布时间】:2010-04-23 00:32:40 【问题描述】:

我有一个包含两个头文件 mainwindow.h 和 website.h 的项目。

我想从 mainwindow.cpp 内部访问 website.cpp 中的方法。

我可以通过执行 Window w 然后执行 w->function(); 从主窗口内部访问任何函数;

但是,当函数从主窗口内部结束时,w 的内存会被清除。

如何保留 w 以及如何从我的头文件中声明网站 w?

谢谢, V$h3r

【问题讨论】:

不,Window 的实例在超出范围时会消失。这取决于你在哪里声明它。从 Window 实例调用函数在这方面(通常)没有任何影响。混入 .cpp 文件名时有点混乱,在描述问题时最好坚持使用类。 【参考方案1】:

听起来像是一个范围界定问题。阅读this 和this。

另外,请务必检查 mainwindow 中的代码是否没有返回对本地指针 (In depth background) 的引用

祝你好运!

【讨论】:

如果我在 mainwindow.cpp 中声明网站 w,在从主窗口调用 w->get() 后,我还能让它保存一个包含 html 内容的字符串吗?谢谢,V$h3r 这取决于你如何在主窗口中声明 w (这是使用 extern 的一个很好的例子:codersource.net/c/c-tutorials/…)【参考方案2】:

我猜你的website.h 应该声明某种接口(我不知道你是在使用类还是在命名空间中对函数进行分组,但这并不重要)。

当你声明你的接口来操作你的网站时,在window实现中调用它的方法应该很容易,只需包含标题并使用它。

如果出了什么问题,那你最好考虑换个程序设计/去掉website mainwindow耦合,只留下ma​​inwindow 。 p>

对不起,如果我误解了你,也许你应该更好地描述你的问题。

【讨论】:

我有一个方法需要时间返回内部异步网站。有没有办法将它连接回主窗口?例如,当 website->get() 完成时,我希望它调用主窗口内的方法并更新显示。 V$h3r 如果您的操作是异步的,那么有一些很好的模式可以帮助您。我会在您的主窗口实现中添加一个事件队列,并使您的“网站”调用向该队列添加一个事件。因此,关于您的示例,我会在您的 get() 方法完成后将一个名为 EVENT_REDRAW 的事件添加到队列中。您的窗口在其更新周期中应该接受每个排队的事件并以某种方式对其进行处理(在这种情况下,您应该进行类似“如果窗口在其队列中看到一个 EVENT_REDRAW 事件,它应该将该事件出列并重绘自身”。 一般来说,winapi 应用程序就是这样工作的,所以如果你是用 winapi 的方式来做的,考虑在你的主窗口中发布一条 WM_PAINT 消息。当然,这种方法可能会破坏您的耦合,因为“网站”应该了解您的主窗口。 在我的第一种方法中,您可以创建自己的名为 EventQueue 的类,然后您的“网站”类(或它实际上是什么)应该只引用一些队列,而不必受窗口约束。因此,您在主窗口代码中所做的将类似于website.initialize(event_queue),其中此队列绑定到您的窗口。 毕竟,如果您想将“窗口”更改为其他内容,只需将 EventQueue 对象添加到“其他内容”即可。希望这会有所帮助。

以上是关于基本 C++ 头文件问题的主要内容,如果未能解决你的问题,请参考以下文章

基本 C++ 头文件问题

C++ 头文件引用

做题头文件

C++ string 基本用法

头文件 - 继承 c++

使用带有头文件的 cpp 文件编写 C++ 程序