pointers - 结构副本问题

标签 pointers compiler-errors visual-studio-2005 c89

尝试从一个位置复制到另一个位置时,使用标准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/

相关文章:

c - %p 是将变量的地址打印为指针,还是打印它指向的内容?

generics - 如何在rust宏中扩展多个特征范围?

c++ - 关于类和错误 : C3861 的帮助

visual-studio-2008 - 如何使用 .vsprops 文件覆盖 MS Visual Studio 中的 VC++ 目录

c - 从函数返回数组/指针

java - 术语:如何谈论 Java 中的指针和引用

python - 将Python 2脚本移植到Python 3时出错

visual-studio - 是否有用于 native C++ Win32 服务的 VisualStudio 项目模板?

c - 结构末尾大小为 0 的数组

java - “找不到符号”或“无法解析符号”错误是什么意思?