2016-05-06 19 views
0

cvに値を代入する際に問題があります。以下の私のコードに基づいて、私はラインでerror: invalid initializerを取得しています:無効な初期化子 - 構造体の配列

ChVec cv = r->cv; 

誰もが問題が何であるかを知っているだろうか?

ありがとうございました。

tuple.c

#include "defs.h" 
#include "tuple.h" 
#include "reln.h" 
#include "hash.h" 
#include "chvec.h" 
#include "bits.h" 

Bits tupleHash(Reln r, Tuple t) 
{ 
    ChVec cv = r->cv; 
    ... 
    ... 
} 

chvec.h

#include "defs.h" 
#include "reln.h" 

#define MAXCHVEC 32 

typedef struct { 
    Byte att; 
    Byte bit; 
} ChVecItem; 

typedef ChVecItem ChVec[MAXCHVEC]; 

reln.h

+1

は[、最小完全、かつ検証例]を投稿してください(http://stackoverflow.com/help/mcve)。 –

+0

- このリンクはあなたに役立つでしょう。 http://stackoverflow.com/questions/3635053/how-to-copy-array-of-struct-in-c – techEmbedded

答えて

2
#ifndef RELN_H 
#define RELN_H 1 

typedef struct RelnRep *Reln; 

#include "defs.h" 
#include "tuple.h" 
#include "chvec.h" 
#include "page.h" 


struct RelnRep { 
    Count nattrs; // number of attributes 
    Count depth; // depth of main data file 
    Offset sp;  // split pointer 
    Count npages; // number of main data pages 
    Count ntups; // total number of tuples 
    ChVec cv;  // choice vector 
    char mode; // open for read/write 
    FILE *info; // handle on info file 
    FILE *data; // handle on data file 
    FILE *ovflow; // handle on ovflow file 
}; 

タイプChVec配列であれば、配列変数に代入することができないように、別の配列を使って配列を初期化することはできません。

代わりに、コピーに配列を必要とする:

ChVec cv; 
memcpy(cv, r->cv, sizeof cv); 
2

配列は、あなたがやっている方法を割り当てることはできません。

あなたが内容をコピーするmemcpy()を使用する必要があります。

ChVec cv; 
memcpy(cv, r->cv, sizeof(cv)); 
関連する問題