Cpp文件包括虽然也能够在其中调试

时间:2013-05-27 02:31:59

标签: c++ header

在线程池实现中:

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

2 个答案:

答案 0 :(得分: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
}

看起来ThreadPool是你设计中的一个接口。有一些更好的工具,比如设计模式,可以改进你的工具。

答案 1 :(得分:0)

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