在c+中,如何将一个构造函数调用到另一个构造函数中,或者如何从彼此调用接口+;? 我用C++完成了一点小的设计。我有一个用于tcp通信的接口。从ITCP_消息继承的类是TCP_消息,它将数据发送到IManipulate接口。IManipulate是内置的操纵器,用于模拟接收到的消息并发送确认。代码如下所示:
ITCP_message.h在c+中,如何将一个构造函数调用到另一个构造函数中,或者如何从彼此调用接口+;? 我用C++完成了一点小的设计。我有一个用于tcp通信的接口。从ITCP_消息继承的类是TCP_消息,它将数据发送到IManipulate接口。IManipulate是内置的操纵器,用于模拟接收到的消息并发送确认。代码如下所示:,c++,pointers,inheritance,constructor,interface,C++,Pointers,Inheritance,Constructor,Interface,ITCP_message.h class ITCP_message{ public: ITCP_message() ; virtual ~ITCP_message() =0; virtual void sendAck() =0; virtual void getmessage() =0; }; #include "ITCP_message.h" #include "IManipulate.h" class TC
class ITCP_message{
public:
ITCP_message() ;
virtual ~ITCP_message() =0;
virtual void sendAck() =0;
virtual void getmessage() =0;
};
#include "ITCP_message.h"
#include "IManipulate.h"
class TCP_message : public ITCP_message {
public:
TCP_message() ;
~TCP_message();
void sendAck();
void getmessage();
protected:
IManipulate* itsManipulate;
}
我继承这个类是为了做实际工作
TCP_message.h
class ITCP_message{
public:
ITCP_message() ;
virtual ~ITCP_message() =0;
virtual void sendAck() =0;
virtual void getmessage() =0;
};
#include "ITCP_message.h"
#include "IManipulate.h"
class TCP_message : public ITCP_message {
public:
TCP_message() ;
~TCP_message();
void sendAck();
void getmessage();
protected:
IManipulate* itsManipulate;
}
TCP_message.cpp
#include "Manipulator.h"
TCP_message::TCP_message(){
itsManipulate = new Manipulator;
}
TCP_message::sendAck(){
....
}
TCP_message::getmessage(){
itsManipulate->manipulateData();
}
我有另一个接口来处理接收到的消息。
IManipulate.h
Class IManipulate{
public:
IManipulate() ;
Virtual ~IManipulate() ;
Virtual void manipulateData() ;
}
我从IManipulate继承了一个类
Manipulator.h
class Manipulator : public IManipulate{
public:
Manipulator () ;
~Manipulator () ;
void manipulateData() ;
protected:
ITCP_message* itsMyTCPMessage;
}
操纵器
TCP_message.h
Manipulator :: Manipulator (){
itsMyTCPMessage = new TCP_message;
}
void Manipulator :: manipulateData(){
....
itsMyTCPMessage->sendAck();
}
我想操纵data()函数来执行实际工作,并通过接口发送确认消息。但在主要功能方面,我有一个问题
main.cpp
int main()
{
TCP_message tcp;
...
}
当我创建对象时,它首先进入TCP_消息构造函数,然后在那里itsOperation=new操纵器。然后它转到操纵器构造函数,在那里它的mytcpmessage=newtcp\u消息。然后它返回到TCP_消息并崩溃。如何将一个接口调用到另一个接口,或者如何在内存中分配这些指针 你确定这是正确的代码吗?您正在尝试使用纯虚函数分配类型,因此此代码不应编译。其他的都是真的。它被编译了@Stephennewell您有一个循环依赖项,它会导致无限循环:
TCP\u消息()
->manipular()
->TCP\u消息()
->manipular()
等。在某个时候,您的进程会因为递归调用这么多函数而耗尽堆栈内存。我建议使用调试器来查看执行流程。也许您可以将指向它所引用的消息的指针传递给操纵器
构造函数,这样您就可以执行TCP_message():itsmipulator(新操纵器(this)){}
Yes这是真的。我明白为什么我错了,但我找不到解决办法。当我调试它时,我看到你说。我如何解决这个问题@Jorge Bellonth这是一个设计问题,因此您需要了解如何将循环依赖转化为没有循环的东西(层次结构)。我不知道您要解决的问题,因此我无法帮助您解决(这也是一个不同的问题)。您确定这是正确的代码吗?您正在尝试使用纯虚函数分配类型,因此此代码不应编译。其他的都是真的。它被编译了@Stephennewell您有一个循环依赖项,它会导致无限循环:TCP\u消息()
->manipular()
->TCP\u消息()
->manipular()
等。在某个时候,您的进程会因为递归调用这么多函数而耗尽堆栈内存。我建议使用调试器来查看执行流程。也许您可以将指向它所引用的消息的指针传递给操纵器
构造函数,这样您就可以执行TCP_message():itsmipulator(新操纵器(this)){}
Yes这是真的。我明白为什么我错了,但我找不到解决办法。当我调试它时,我看到你说。我如何解决这个问题@Jorge Bellonth这是一个设计问题,因此您需要了解如何将循环依赖转化为没有循环的东西(层次结构)。我不知道你想解决什么问题,所以我不能帮你(这也是一个不同的问题)。