c++里面,传入一个结构体指针,如何将该指针指向的结构体赋值给另一个结构体实例呢?
structMessage{intx;inty;}传入了一个Message*ms;如何将ms中的值赋给新定义的一个结构体Messagems1呢?我现在做的是将数据取出来一...
struct Message
{
int x;
int y;
}
传入了一个Message * ms;
如何将ms中的值赋给新定义的一个结构体Message ms1呢?
我现在做的是将数据取出来一个个赋值,能不能在不知道结构体具体定义的情况下,将所有内容传递给ms1呢?
急求,另加分 展开
{
int x;
int y;
}
传入了一个Message * ms;
如何将ms中的值赋给新定义的一个结构体Message ms1呢?
我现在做的是将数据取出来一个个赋值,能不能在不知道结构体具体定义的情况下,将所有内容传递给ms1呢?
急求,另加分 展开
1个回答
展开全部
”不知道结构体具体定义“是指没有对应头文件吗?
如果是这样的话,没有办法把一个opaque的实例通过指针进行直接访问,除非提供这个结构体定义的库同时提供了对应的API操作例如拷贝、修改之类的。之所以如此,可能设计时有意保留了对于结构体变化的灵活性。例如需要增添一个新的member(int z) 时,对客户代码没有影响。
其他一切hackary手段来实现这个目的都可能会导致库升级时代码出现未定义行为。
如果有定义,只是不想要一个个赋值来就简单多了。
PLD的struct应该有默认的构造函数,你试一下
Message ms1(*ms);
或者
Message ms1 = *ms;
默认情况下是浅复制,纯值问题不大,但里面有指针时候情况就很复杂了,需要避免对ms1的操作影响ms指针指向的内容,编译器碰到这种情况一般也会waring。
如果是这样的话,没有办法把一个opaque的实例通过指针进行直接访问,除非提供这个结构体定义的库同时提供了对应的API操作例如拷贝、修改之类的。之所以如此,可能设计时有意保留了对于结构体变化的灵活性。例如需要增添一个新的member(int z) 时,对客户代码没有影响。
其他一切hackary手段来实现这个目的都可能会导致库升级时代码出现未定义行为。
如果有定义,只是不想要一个个赋值来就简单多了。
PLD的struct应该有默认的构造函数,你试一下
Message ms1(*ms);
或者
Message ms1 = *ms;
默认情况下是浅复制,纯值问题不大,但里面有指针时候情况就很复杂了,需要避免对ms1的操作影响ms指针指向的内容,编译器碰到这种情况一般也会waring。
追问
想问一下,
_beginthreadex(NULL, NULL, &serverNet.ListenThread, NULL, NULL, NULL);
这里第三个参数为另外一个类中的函数,应该怎样调用呢?
追答
你这个是要调用某个类的member函数吧。这样的话,要么利用std::bind绑定一个实例或者自己写一个静态的函数warp一下。
第一种方法改为std::bind(&serverNet::ListenThread, server_obj);
第二种方法,写一个
void proxyListenThread(void * arg) {
server_obj.ListenThread(arg);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询