Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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
在c+中,如何将一个构造函数调用到另一个构造函数中,或者如何从彼此调用接口+;? 我用C++完成了一点小的设计。我有一个用于tcp通信的接口。从ITCP_消息继承的类是TCP_消息,它将数据发送到IManipulate接口。IManipulate是内置的操纵器,用于模拟接收到的消息并发送确认。代码如下所示:_C++_Pointers_Inheritance_Constructor_Interface - Fatal编程技术网

在c+中,如何将一个构造函数调用到另一个构造函数中,或者如何从彼此调用接口+;? 我用C++完成了一点小的设计。我有一个用于tcp通信的接口。从ITCP_消息继承的类是TCP_消息,它将数据发送到IManipulate接口。IManipulate是内置的操纵器,用于模拟接收到的消息并发送确认。代码如下所示:

在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

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 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这是一个设计问题,因此您需要了解如何将循环依赖转化为没有循环的东西(层次结构)。我不知道你想解决什么问题,所以我不能帮你(这也是一个不同的问题)。