Delphi 将TServerSocket绑定到C++;建造商(10.1.2)
我仍在使用不推荐使用的TServerSocket组件 我想将TServerSocket绑定到特定的IP。此前,德尔福曾在本网站上提出过以下问题: <>但是我不能让它在C++ Builder中工作。 我的代码是:Delphi 将TServerSocket绑定到C++;建造商(10.1.2),delphi,c++builder,Delphi,C++builder,我仍在使用不推荐使用的TServerSocket组件 我想将TServerSocket绑定到特定的IP。此前,德尔福曾在本网站上提出过以下问题: 但是我不能让它在C++ Builder中工作。 我的代码是: class ServerWrapper : private TServerSocket { public: ServerWrapper(); private: }; ServerWrapper::ServerWrapper() : TServerSocket (
class ServerWrapper : private TServerSocket {
public:
ServerWrapper();
private:
};
ServerWrapper::ServerWrapper()
: TServerSocket (0)
{
//---
}
ServerWrapper* pServer =0;
//...
//..
//.
// And in a function:
pServer = new ServerWrapper;
pServer->Address = "192.168.0.1" ;
pServer->Active = true;
但是它不编译。
它说:
E2247“TAbstractSocket::Address”不可访问
<>我用的是C++ Builder 101.2柏林。顺便说一下,< P>它不起作用,因为你没有正确地把德尔菲代码翻译成C++。 首先,您使用的是私有继承,而不是公共继承。因此,从
TServerSocket
继承的所有公共和受保护成员将在ServerWrapper
中是私有的。Delphi没有受保护/私有继承的概念,只有公共继承
但更重要的是,德尔福有一个隐性友谊的概念。在一个单元内,所有类都可以完全访问在同一单元中声明的其他类的私有/受保护成员。包括继承的受保护成员。另一个问题中的Delphi示例利用了该特性,通过声明本地帮助器类隐式地获得对声明帮助器的单元的Address
属性的公共访问
但是C++没有隐含的友谊概念。要将Delphi示例转换为C++,必须对<保护>代码>地址> /COD>属性进行<强> >显式地提升< /强>访问。
Delphi代码的直译在C++中如下所示:
类TServerSocketAccess:公共TServerSocket
{
公众:
__物业地址;
//或:
//使用TServerSocket::Address;
};
((TServerSocketAccess*)ServerSocket1)->Address=“192.168.0.1”;
ServerSocket1->Active=true;
应用于您的ServerWrapper
类,它将如下所示:
classserverwrapper:publictserversocket
{
公众:
ServerWrapper();
__物业地址;
//或:
//使用TServerSocket::Address;
};
ServerWrapper::ServerWrapper()
:t服务器套接字(0)
{
//---
}
ServerWrapper*pServer=0;
//...
pServer=newserverwrapper;
pServer->Address=“192.168.0.1”;
pServer->Active=true;
感谢您至少承认它已被弃用:-)在ServerWrapper类的公共部分不添加“\u property Address;”行的情况下,所有公共、受保护和私有继承都会产生相同的错误结果。但当然,当我在公共继承中添加“uu property Address;”时,它现在可以工作:)@Aethon是的,因为Address
在tserverssocket
中声明为protected
,所以您需要一个public
语句来将其推广到公共