2010-04-23 81 views
0

我有一個項目有兩個頭文件mainwindow.h和website.h。基本的C++頭文件問題

我想從mainwindow.cpp中訪問來自website.cpp的方法。我可以通過執行Window w然後執行w-> function()來訪問mainwindow中的任何函數。

但是,當函數從主窗口內完成時,w的內存將被刪除。

我該如何保持w和我的頭文件如何聲明網站w?

感謝, V $ H3R

+0

不,窗口實例在超出範圍時消失。這取決於你在哪裏申報。調用Window實例的函數在這方面沒有任何影響(通常)。在混合使用.cpp文件名時會有點混亂,在描述問題時更好地使用類。 – 2010-04-23 00:47:18

回答

1

我猜你應該website.h聲明某種接口(我不知道,如果你使用類或名稱空間中的分組功能,但它並不重要) 。

當你聲明你的界面來操縱你的網站時,應該很容易在window實現中調用它的方法,只需包含標題並使用它。

如果出現錯誤,那麼你最好想別的程序設計/刪除網站< - >主窗口耦合,只留下主窗口< - 網站

對不起,如果我誤解了你,可能你應該更好地描述你的問題。

+0

我有一種方法需要時間才能返回異步的網站。有沒有辦法將它連接回主窗口?例如,當website-> get()完成時,我希望它調用mainwindow中的方法並更新顯示。 V $ h3r – Vsh3r 2010-04-23 00:59:03

+0

如果你的行爲是異步的,有一些很好的模式可以幫助你。我會在主窗口實現中添加一個事件隊列,並使您的「網站」調用將一個事件添加到該隊列中。所以,就你的例子而言,在你的get()方法完成之後,我會將一個名爲EVENT_REDRAW的事件添加到隊列中。你的窗口在更新週期中應該採取每一個排隊的事件並以某種方式處理它(在這種情況下,你應該做出類似於「如果窗口在其隊列中看到EVENT_REDRAW事件,它應該取消該事件並重繪本身」。 – 2010-04-23 01:15:52

+0

一般來說,這winapi應用程序是如何工作的,所以如果你以winapi的方式來做這件事,考慮在你的主窗口中發佈WM_PAINT消息。當然,這種方法可能會破壞你的耦合,因爲「網站」應該知道你的主窗口。 – 2010-04-23 01:17:40

2

聽起來像一個範圍界定問題。閱讀thisthis

此外,一定要檢查內mainwindow你的代碼是不是一個局部指針(In depth background)

祝您好運返回一個參考!

+0

是的,這是一個範圍問題。 – Vsh3r 2010-04-23 00:56:49

+0

如果我在我的mainwindow.cpp中聲明網站w,我仍然可以在從mainwindow調用w-> get()之後用html內容保存一個字符串? 謝謝, V $ h3r – Vsh3r 2010-04-23 01:01:45

+0

這取決於你如何在mainwindow中聲明w(這是使用extern的一個很好的例子:http://www.codersource.net/c/c-tutorials/c-tutorial-storage- specifiers.aspx) – Bolster 2010-04-23 01:04:40