私は構造を持っています:
typedef struct stock {
const char* key1p2; // stock code
const char* key2p2; // short desc
const char* desc1; // description
const char* prod_grp; // product group
const char dp_inqty; // decimal places in quantity
const long salprc_u; // VAT excl price
const long salprc_e; // VAT includive price
const long b_each; // quantity in stock
const long b_alloc; // allocated qty
const char* smsgr_id; // subgroup
const char** barcodes; // barcodes
} stock_t;
そして、この構造体のインスタンスの配列を、ストック構造体ごとに1行のコードで初期化したいと思います。
私が試してみました:
stock_t data_stock[] = {
{ "0001", "Soup", "Tomato Soup", "71", 0, 100, 120, 10, 0, "", {"12345", "23456", NULL} },
{ "0002", "Melon", "Melon and Ham", "71", 0, 200, 240, 10, 0, "", {"34567", "45678", NULL} },
...
{ NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL }
};
しかし、それは失敗します:
data.c:26:74: warning: incompatible pointer types initializing 'const char **' with an expression of type 'char [6]'
[-Wincompatible-pointer-types]
{ "0001", "Soup", "Tomato Soup", "71", 0, 100, 120, 10, 0, "", {"12345", "23456", NULL} },
^~~~~~~
char **であるため、問題となるのはバーコードフィールドです。
(それはclangでしたが、GCCは同様のエラーを報告しますが、あまり役に立ちません。)
これは、コンパイラが「12345」の前に中括弧を無視したかのようです。
私は以下を使用して問題を回避することができます:
const char *barcodes0001[] = {"12345", "23456", NULL};
stock_t data_stock[] = {
{ "0001", "Soup", "Tomato Soup", "71", 0, 100, 120, 10, 0, "", barcodes0001 },
この問題の原因はchar []とchar*で異なりますか、それとももっと微妙なことがありますか。(おそらく、構造体の配列を初期化することはできますが、配列の構造体を初期化することはできません。)