【发布时间】:2012-09-05 16:13:32
【问题描述】:
当我尝试将结构从一个位置复制到另一个位置时,我在使用标准 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% 正确,如果有人指出问题或需要澄清的内容,我将编辑问题。 )
【问题讨论】:
标签: pointers compiler-errors visual-studio-2005 c89