引用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();的功能体在哪里?

08-16 08:12