C++ C++;类的基本错误
为什么我不能使用外壳代码中的网络 这是外壳代码函数的定义C++ C++;类的基本错误,c++,C++,为什么我不能使用外壳代码中的网络 这是外壳代码函数的定义 class IEngine: public ICoreObject { private: Network *_Network; bool _Process; public: IEngine(); ~IEngine(); void Initial(...); void StartServer(unsigned short port); bool Process
class IEngine: public ICoreObject
{
private:
Network *_Network;
bool _Process;
public:
IEngine();
~IEngine();
void Initial(...);
void StartServer(unsigned short port);
bool Process();
void StopProcess();
void StartProcess();
friend void ShellCode(int id,struct NE_Bin var);
};
void外壳代码(int-id,struct-NE_-Bin-var)//
{
std::cout你需要一个IEngine实例作为参数来访问它的成员变量…IEngine
作为朋友拥有shell代码。这意味着你可以访问private
**一个IEngine
对象的成员。\u-Network
只是你上下文中的一个变量,不受任何约束
类似这样的方法会奏效:
void ShellCode(int id,struct NE_Bin var) //функция-друг
{
std::cout<<"ShellFunc Delegated"<<std::endl;
var.data = (void *)"T";
var.length = 1;
//_Network->SendMessageW(id, var);
}
或者,您可以在方法内部使用全局实例(如果有)。您可以发布ShellCode()的定义吗?因为原因……你如何尝试使用它?我们是否应该猜测编译器正在报告什么错误?假设我们首先讨论编译错误,而不是链接器或运行时错误。我没有编译问题,我就是无法到达这个实例。@ LucChanGigig:我不考虑全局变量G。ood实践,所以我没有提到。无论哪种方式,他都需要访问IEngine实例。@Borgeader,这是不同的。删除了dv。我同意这不是好的实践,但说“除非你这样做,否则这是不可能的”,实际上是错误的。@user1174133\u网络指针以NULL开头。您需要在它包含任何内容之前将其分配给某个对象。我建议您添加一个setter或向构造函数添加一个参数。内存中的\u网络地址没有问题。有一个问题我无法访问IEEngine::\u网络。@user1174133您已将其声明为友元。如果静态友元方法可以在不引用实例的情况下访问实例,您认为它如何获取该实例?您仍然必须将IEngine实例传递给该方法,然后才能使用其私有成员。
void ShellCode(int id,struct NE_Bin var, IEngine* pEngine)
{
std::cout<<"ShellFunc Delegated"<<std::endl;
var.data = (void *)"T";
var.length = 1;
pEngine->_Network->SendMessageW(id, var);
}
IEngine* pEngine /*initialize it here*/;
ShellCode(0, NE_Bin(), pEngine);