0

在线程池实现中:

有一个 threadpool.h 有一个虚拟类线程池。

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 工具),还是我必须重写它?

4

2 回答 2

0

您应该创建一个 threadpoolImpl.h 并将类 ThreadPoolImpl 的定义添加到其中。在你的 main.cpp 中,你只需要包含 threadpoolImpl.h 。

线程池Impl.h:

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

线程池Impl.cpp:

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

看起来 ThreadPool 是您设计中的一个接口。有一些更好的工具,例如设计模式来改进您的实现。

于 2013-05-27T02:41:34.017 回答
0

你让它听起来像你在#includeing threadpool.cpp。不要那样做,只需确保它实际上是它显示在解决方案资源管理器中并正在编译的解决方案/项目的一部分。

于 2013-05-27T04:33:25.843 回答