我在尝试执行从一个位置到另一个位置的结构副本时,在Visual Studio 2005中使用标准C编译器时遇到了编译器问题。结构副本问题
的类型是在一个文件中定义如下:
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:‘=’:左操作数必须是左值看起来好像这应该表现为正常的复制操作,事实上,如果我在更基本的结构上执行类似的操作,我不会收到错误。例如,如果我复制只包含两个整数的结构RS。
有没有人有一个坚实的解释,为什么这个操作似乎是不正确的? (免责声明:我已将此代码作为我的实际代码的清理版本用于示例目的,因此它在语法上可能不是100%正确,如果有人指出问题或需要澄清的问题,我将编辑该问题)