在尝试从一个位置复制到另一个位置时,我在使用标准 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:'=':左操作数必须是左值。看起来这应该表现为正常的复制操作,事实上,如果我对一个更基本的结构执行类似的操作我没有得到错误。例如,如果我复制一个只包含两个整数的结构。
有没有人对为什么这个操作似乎不正确有一个可靠的解释?
(免责声明:出于示例目的,我已将此代码开发为我的实际代码的清理版本,因此它在语法上可能不是 100% 正确,如果有人指出问题或需要澄清的内容,我将编辑问题。)