2013-05-27 65 views
0

在一個線程池實現:Cpp文件包括雖然也能夠在其中調試

有一個threadpool.h它有一個虛擬類threadpool。

class ThreadPool { 
    funcX(){} = 0 
    ... 
} 
// ThreadPoolImpl not defined or declared in this file. 

在相應的threadpool.cpp中,有從threadpool繼承的實現threadpoolImpl。

//include threadpool.h header. 
class ThreadPoolImpl : public ThreadPool { 
     funcX() {....}; // The function I want to debug inside. 
} 

我的問題:

在我的主要功能: 如果我只包括threadpool.h,然後「的缺乏threadpoolImpl定義的原因,我得到

incomplete type not allowed error. 

如果我有threadpool.cpp而不是threadpool.h,我得到鏈接錯誤,因爲threadpool.cpp編譯了兩次。爲了解決這個問題,我從我的項目中刪除了threadpool.cpp。 但是,這樣,我無法用斷點調試threadpool.cpp。

請有人告訴我是否可以使用threadpoolImpl,同時還可以在其中進行調試(使用VS IDE工具),還是我必須重寫它?

回答

0

您應該創建一個threadpoolImpl.h並將類ThreadPoolImpl的定義添加到它。在你的main.cpp中,你只需要包含threadpoolImpl.h。

threadpoolImpl.h:

#include <threadpool.h> 
class ThreadPoolImpl : public ThreadPool { 
     funcX(); // The function I want to debug inside. 
} 

threadpoolImpl.cpp:

void ThreadPoolImpl::funcX() 
{ 
    //debug here 
} 

好像是線程池是在您的design.There一個界面有一些更好的工具,如設計模式來提高你的實現。

+0

我將ThreadPoolImpl移至threadPool.h,而不是創建新的ThreadPoolImpl.h文件。但是threadPoolImpl類在threadPool.cpp中找不到它的函數實現。奇怪的。 哎呀,我已經從項目中刪除了ThreadPool.cpp,對不起〜 –

+0

你是否爲funcX()添加了ThreadPoolImpl :: befor? @RobertBean –

+0

我一直在閱讀的代碼應該是未完成的代碼,其代碼複製到別處(可能來自多個文件)。我正在抓一個例子來學習池東西.. 但我修改它(移動threadpoolimpl到它自己的文件),如你所說。現在它像我希望的那樣工作。 謝謝。 –

0

你讓它聽起來像你是#include ing threadpool.cpp。不要這樣做,只要確保它實際上是解決方案資源管理器中顯示並正在編譯的解決方案/項目的一部分。