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);
一方、別のファイル(これが私の問題です)で、ローカルテーブルタイプオブジェクトを作成しようとしており、getメソッドを使用してグローバルテーブルメンバーで埋めようとしています(「静的」であるふりをしましょう)
#include "definition.h"
extern global_s* pglobal;
tabletype t;
gettable(&t);
void gettabl (tabletype* pt)
{
*pt = pglobal->table;
}
コンパイルすると、gettable 関数の行で「エラー C2106: '=': 左オペランドは左辺値でなければなりません。これは通常のコピー操作として動作するように見えますが、実際により基本的な構造体に対して同様の操作を実行しても、エラーは発生しません.たとえば、2 つの整数のみを含む構造体をコピーした場合.
この操作が正しくないと思われる理由について、誰かがしっかりとした説明を持っていますか?
(免責事項:このコードは、例として実際のコードのスクラブバージョンとして開発したため、構文的に100%正しいとは限りません。誰かが問題を指摘したり、明確にする必要がある場合は、質問を編集します。)