Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “抽象类类型的对象”;“连接”;不允许_C++_Boost - Fatal编程技术网

C++ “抽象类类型的对象”;“连接”;不允许

C++ “抽象类类型的对象”;“连接”;不允许,c++,boost,C++,Boost,当我在旧的连接类中工作正常时,出现了什么问题以及如何修复它 1 IntelliSense: object of abstract class type "Connection" is not allowed: d:\c++\ugs\accountserver\connection.h 17 所以我在这里错过了什么 您没有为OnReceived提供定义,因此它是一个纯虚拟(抽象)方法,而类是一个抽象类。不能实例化抽象类的对象。要使用方法OnReceived,您必须为它提供一个实现(

当我在旧的连接类中工作正常时,出现了什么问题以及如何修复它

1   IntelliSense: object of abstract class type "Connection" is not allowed:    d:\c++\ugs\accountserver\connection.h   17

所以我在这里错过了什么

您没有为OnReceived提供定义,因此它是一个纯虚拟(抽象)方法,而类是一个抽象类。不能实例化抽象类的对象。要使用方法
OnReceived
,您必须为它提供一个实现(它现在做什么?什么都没有)。抽象类的目的是由具体的实现进行子类化,然后为纯虚拟方法提供实现


编辑:部件
新连接(io\U服务)
无法工作,原因如下:无法创建具有纯虚拟函数的类的对象(以
=0;
结尾的声明)。您需要子类化
连接
,并为这些方法提供实现(如
OnConnected
)。你以前的班级没有这个问题。它有纯虚拟方法,但您没有尝试实例化它。如果您仍然没有看到错误,我建议您参考C++中的面向对象的一些材料,尤其是虚拟和纯虚方法。

您使用它,但直到它在一些派生类中实现。
您无法创建抽象类的对象,因为并非所有函数都已实现。

您已决定进行
连接
抽象,但随后尝试将其实例化。你想做什么?

如果你还没有的话,也许值得一试。@Christian Rau thnx但是在我的旧课上,我现在贴的是正确的,我不明白这里缺少了什么@MixedCoder它也不应该与这个类一起工作,因为这也是一个抽象类。@Christian Rau它与旧类一起工作很好,除了如何将纯虚拟方法与连接类一起使用外,因为我真的不能得到它,我已经知道虚拟和纯虚拟方法,但我不能让这个类工作,你能举个例子吗?谢谢你的时间和精力help@MixedCoder请阅读纯虚拟方法。它们本质上是没有实现的虚拟方法。它们只是告诉我们,子类有这样一个功能。但是实际的子类负责提供它们的实现。第五次:您不能创建具有纯虚拟方法的类的对象(您可以使用
new
)。您必须创建一个从
Connection
派生的具体子类的对象,该子类实现纯虚拟方法(因此它们不再是纯的)。如果你仍然不明白,请看我答案的最后一句。@Christian Rau啊啊,我明白了,是的,很抱歉浪费了你的时间:)谢谢你it@MixedCoder:我看不出有什么区别,我的答案也不会改变。连接类应该有两个纯virtule方法,因为AuthConnection将从它驱动,所以一旦我的服务器调用OnConnect方法,我可以使用我的AuthConnection::OnConnected向客户端发送一些数据,如果我的话有意义的话@MixedCoder:好的,从中派生出来。您不能直接实例化它。
1   IntelliSense: object of abstract class type "Connection" is not allowed:    d:\c++\ugs\accountserver\connection.h   17
class Connection
{
    public:
        explicit Connection(int socket);
        virtual ~Connection();

        virtual void OnConnected() =0;
        virtual int Send(uint8_t* buffer, int length);
        bool Receive();
        int getSocket() const;
        void Disconnect();
    protected:
        virtual void OnReceived(uint8_t* buffer, int len) = 0;
    private:
        int m_socket;
        bool disconnecting;
};