引用this Stackoverflow问题,我无法解决使用c ++风格的接口(即抽象类)实现DI的相同问题。我没有破坏旧线程,而是创建了这个线程。编译器在最后一行抛出错误。
class IService {
virtual void DoWork() = 0;
virtual bool IsRunning() = 0;
};
class ClientA : IService {
void DoWork() {
std::cout << "Work in progress inside A";
}
bool IsRunning() {
return true;
}
};
class ClientB : IService {
void DoWork() {
std::cout << "Work in progress inside B";
}
bool IsRunning() {
return true;
}
};
class Server {
IService* _service;
Server(IService* service) : _service(service)
{ }
// Error: this declaration has no storage class or type specifier
// Compiler: MSVC 2017
_service->DoWork();
};
最佳答案
在C ++类中,默认情况下成员是私有的。
您应在public:
之前指定virtual void DoWork() = 0;
。
默认情况下,C ++继承是私有的(使用class
关键字时)。尝试使用: IService
代替: public IService
。查看私有,受保护的公共继承here之间的区别。_service->DoWork();
的功能体在哪里?