Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
Delphi 将TServerSocket绑定到C++;建造商(10.1.2)_Delphi_C++builder - Fatal编程技术网

Delphi 将TServerSocket绑定到C++;建造商(10.1.2)

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 (

我仍在使用不推荐使用的TServerSocket组件

我想将TServerSocket绑定到特定的IP。此前,德尔福曾在本网站上提出过以下问题:

<>但是我不能让它在C++ Builder中工作。 我的代码是:

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
语句来将其推广到公共