gpt4 book ai didi

pointers - 结构副本问题

转载 作者:行者123 更新时间:2023-12-02 11:05:52 25 4
gpt4 key购买 nike

尝试从一个位置复制到另一个位置时,使用标准C编译器在Visual Studio 2005中出现编译器问题。

这些类型在文件中定义如下:

definition.h

#define MAX 7

typedef struct{
char recordtext[18];
boolean recordvalid;
}recordtype;

typdef recordtype tabletype[MAX];

typedef struct{
tabletype table;
}global_s;

让我们假设在某个地方实例化并初始化了global_s“对象”,并创建了指向该结构的指针。
#include "definition.h"

global_s global;
global_s* pglobal = &global;
init(&pglobal);

同时,在另一个文件中(这是我的问题所在),我试图创建一个本地tabletype对象,并使用get方法保护全局(使用假装它是“静态”),并用全局表成员填充它。
#include "definition.h"

extern global_s* pglobal;

tabletype t;
gettable(&t);

void gettabl (tabletype* pt)
{
*pt = pglobal->table;
}

当我进行编译时,gettable函数中的行引发编译器错误“错误C2106:'=':左操作数必须为l值。看起来这应该像正常的复制操作一样,实际上,如果我在更基本的结构上执行类似的操作,我不会收到错误消息,例如,如果我复制仅包含两个整数的结构。

是否有人对此操作为什么看起来不正确有扎实的解释?

(免责声明:出于示例目的,我已将此代码开发为实际代码的清理版本,因此在语法上可能不是100%正确,如果有人指出问题或需要澄清的内容,我将编辑问题。)

最佳答案

它是结构中的数组;他们无法分配。您应该为每个结构定义一个operator =(),并在数组上使用memcpy,或者将它们复制到一个循环的元素中。

关于pointers - 结构副本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12285623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com