不能访问类中声明的受保护成员
error C2248 : cannot access protected member declared in class
我有一个问题与基类的保护构造函数,这是在派生类的私有函数中使用:
基类:
class Socket
{
public:
virtual ~Socket();
// Constructors :
Socket();
protected:
Socket(SOCKET& s);
};
派生类:
class Server : public Socket
{
public:
Server();
~Server();
private:
int ServerLoop();
};
我尝试在ServerLoop函数中创建Socket对象
SOCKET client_sock = accept( m_socket, ( sockaddr* )&client_addr, &size );
Socket* Client = new Socket( client_sock );
^^^^^^
但是我得到这个错误:
error C2248: 'NET_SOCKETS::Socket::Socket' : cannot access protected member
declared in class 'NET_SOCKETS::Socket'
在^^^^上的行。是什么导致了这个错误?
这对我来说有点奇怪,因为它是一个构造函数,但它的原理与非静态成员函数相同。受保护的基类非静态成员函数只能在派生类的实例上调用(或者再次从该类派生),否则,只要从基类派生,就可以访问任何派生类的受保护特性。
一种解决方法就是这样做,派生一个专门用于调用受保护的基类构造函数的类。
。、替换
Socket* Client = new Socket( client_sock );
struct DSocket: Socket
{
DSocket( SOCKET const socket )
: Socket( socket )
{}
};
Socket* Client = new DSocket( client_sock );
相关文章:
- C++:无法访问声明的受保护成员
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 同一模板类但模板类型的受保护成员
- 派生类无法访问基类的受保护成员
- 继承期间受保护成员的皮条
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 是否可以基于私有/受保护成员分配类枚举?
- 依赖模板基础的受保护成员
- 无法从派生类型的作用域访问另一个实例的受保护成员
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 将对象强制转换为派生类以访问父类的受保护成员
- 使从一个基类派生的类能够使用继承的受保护成员
- 派生类如何使用基类的受保护成员
- 访问派生类C++中的受保护成员
- 访问基类的受保护成员
- 如何访问多个继承类中的受保护成员
- 如何从另一个类的基类访问派生类中的受保护成员
- 无法访问派生类中的基本受保护成员!(在虚函数中)
- 如何通过派生类访问基类的受保护成员?
- 如果孩子不需要父母班级的所有受保护成员,这是不好的班级设计吗?