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;
};