在线程池实现中:
有一个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工具),还是必须重写它?
答案 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。不要这样做,只要确保它实际上是解决方案资源管理器中显示的解决方案/项目的一部分,并且正在编译中。