gpt4 book ai didi

c++ - 虚保护函数错误

转载 作者:行者123 更新时间:2023-11-27 23:29:39 25 4
gpt4 key购买 nike

我有包含虚方法的 Packet 类,我有扩展包类的 LogInRequest 类

Packet.h文件

class Packet {

public:
Packet();
virtual ~Packet();

protected:
virtual char* toByte() = 0;
virtual void fromByte(char *d) = 0;
virtual Packet* handle() = 0;

short m_bodySize;
int64_t m_deviceId;
};


/*
* LogInRequestPacket
*/
class LogInRequestPacket: public Packet{

public:

LogInRequestPacket();
virtual ~LogInRequestPacket();

virtual char* toByte();
virtual void fromByte(char *d);
virtual Packet* handle();
};

Packet.cpp文件

#include "Packet.h"

Packet::Packet() {
// TODO Auto-generated constructor stub

}

Packet::~Packet() {
// TODO Auto-generated destructor stub
}

/*
* LogInRequestPacket
*/
LogInRequestPacket::LogInRequestPacket(){
printf("LogInRequestPacket is being created... \n");
}

LogInRequestPacket::~LogInRequestPacket(){

}

char* LogInRequestPacket::toByte(){

}

void LogInRequestPacket::fromByte(char *d){

}

Packet* LogInRequestPacket::handle(){

}

我正在尝试像这样从工厂创建这个 LogInRequestPacket

Packet *packet = m_packetFactory->createInstance(static_cast<PACKET_TYPES>(type));
packet->fromByte(pdata);

而且似乎试图调用 protected 虚拟 fromByte 函数而不是子类的 fromByte 函数。

我在 Packet.h 文件中的 Packet 类作用域中声明“virtual void fromByte(char *d) = 0”的那一行出现了一条红线,它提示说“... is protected”

此外,它也在上下文中提示 x

packet->fromByte(pdata);

我该如何解决这个问题。提前致谢...

最佳答案

当您尝试通过指针或引用调用方法时,编译器将验证对象的 static 类型中函数的访问说明符,即使它会将调用分派(dispatch)给动态类型。

在您的 Packet 类中,您已声明您不希望用户代码(Packet、 friend 和派生类除外)能够调用这些方法,编译器只是告诉你。如果这些函数应该可以从其他代码访问,请将它们公开:

class Packet {
public:
Packet();
virtual ~Packet();

virtual char* toByte() = 0;
virtual void fromByte(char *d) = 0;
virtual Packet* handle() = 0;
protected:
short m_bodySize;
int64_t m_deviceId;
};

关于c++ - 虚保护函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6382462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com