小编Max*_*ker的帖子

C++ Object引用为对象的成员变量

我是C++的新手,我遇到了设置主体系结构的问题.我学会了如何在C#中使用这个特定的体系结构,但我无法在C++中使用它.我的问题如下:我有2个对象.我希望这些对象彼此"了解",所以我希望将这两个对象作为成员变量引用.

考虑一下:

//main.cpp:
#include "Object1.h"
#include "Object2.h"

Object1 *obj1;
Object2 *obj2;

...

obj1 = new Object1(obj2);
obj2 = new Object2(obj1);

...


//Object1.h

#ifndef OBJECT1_H
#define OBJECT1_H

#include "Object2.h"

class Object1 {
    public:
    Object1(Object2*);

    Object2 *obj;
}

#endif


//Object2.h

#ifndef OBJECT2_H
#define OBJECT2_H

#include "Object1.h"

class Object2 {
    public:
    Object2(Object1*);

    Object1 *obj;
}

#endif
Run Code Online (Sandbox Code Playgroud)

然而这是不可能的.因为如果没有ifndef的东西你就会有这种无休止的迭代,包括每个人的.h文件.但是对于ifndef,其中一个对象没有包含其他类定义,也不知道它应该创建什么对象.整个问题不会出现在C#中,因为您不必包含.h文件.你甚至没有.h文件:P.当你创建一个新类时,每个其他类都知道这个类的存在.但是在C++中,你必须包含特定类的.h才能生成这个类的对象(或者甚至是引用).

所以,我的问题是.如何将2个对象作为彼此的引用作为自己的成员变量?

感谢您的关注!

干杯,

Maxim Schoemaker

c++ object include header-files member-variables

2
推荐指数
1
解决办法
473
查看次数

TCP recvfrom()不存储'from'

我正在使用TCP制作服务器程序,我希望得到刚刚收到的消息发送者的IP地址.这是我的代码:

case FD_READ:
{    //Incoming data; get ready to receive
    char buffer[DEFAULT_BUFLEN];
    int bytes_received; 
    memset(buffer, '\0', sizeof(buffer));

    struct sockaddr_in recvIn;
    int recv_length = sizeof(struct sockaddr);

    memset((void *)&recvIn, '\0', recv_length);

    bytes_received = recvfrom(wParam, buffer, DEFAULT_BUFLEN, 0, (struct sockaddr *)&recvIn, &recv_length);
    cout << inet_ntoa(recvIn.sin_addr) << "\n";

    break;
}
Run Code Online (Sandbox Code Playgroud)

所以我正在使用Windows消息来查看是否应该检查数据包.接收数据有效,我可以阅读它和一切.但recvIn变量不会被recvfrom改变.因此,当我执行cout << inet_ntoa(recvIn.sin_addr)<<"\n"时,它会写入"0.0.0.0".我已经google了这个问题,大多数有这个问题的人忘了初始化recv_length.但我很确定我在这里做得对.谁能看到我做错了什么?或者我是否需要使用正在发送的数据进行更改?传入的数据是否可能没有IP地址.这是我非常怀疑的,因为我正在使用TCP.

谢谢你的时间,我希望我能解决这个问题!

c++ tcp ip-address recv

1
推荐指数
1
解决办法
2823
查看次数

标签 统计

c++ ×2

header-files ×1

include ×1

ip-address ×1

member-variables ×1

object ×1

recv ×1

tcp ×1