2016-07-06 29 views
0

と警告は、私は、この構造体を持つ構造体の初期化

Severity Code Description Project File Line 
Warning  braces around scalar initializer Handsteuerung C:\Users\... 11 

Severity Code Description Project File Line 
Warning  (near initialization for 'ChangeIntItemTypeBoolean.parser') Handsteuerung C:\Users\... 11 

Severity Code Description Project File Line 
Warning  initialization from incompatible pointer type Handsteuerung C:\Users\... 11 

Severity Code Description Project File Line 
Warning  (near initialization for 'ChangeIntItemTypeBoolean.parser') Handsteuerung C:\Users\... 11 

Severity Code Description Project File Line 
Warning  excess elements in scalar initializer Handsteuerung C:\Users\... 11 

Severity Code Description Project File Line 
Warning  (near initialization for 'ChangeIntItemTypeBoolean.parser') Handsteuerung C:\Users\... 11 

別のケースでは、構造体の変数をデフォルト値に設定する関数を書きましたが、私はthその方法がはるかに短いので方法です。

によって引き起こされるすべての過ち「.parser = { 『オン』、 『オフ』}」...しかし、私は私のミスを得ることはありません

答えて

5

あなたはcompound literalsを使用するので、変更することができますのinitに

struct ChangeIntItem ChangeIntItemTypeBoolean = { .unit = "", .minimum = 0, .maximum = 1, .parser = (const char *[]){"off", "on"}}; 

テスト

#include <stdio.h> 
#include <stdint.h> 

struct ChangeIntItem 
{ 
    char *unit; 
    const char **parser; 
    int *changevalue; 
    uint16_t *change_eeprom_value; 
    int maximum; 
    int minimum; 
}; 

int main() 
{ 
    struct ChangeIntItem ChangeIntItemTypeBoolean = { .unit = "", .minimum = 0, .maximum = 1, .parser = (const char *[]){"off", "on"}}; 

    printf ("%s - %s\n", ChangeIntItemTypeBoolean.parser[0], ChangeIntItemTypeBoolean.parser[1]); 
} 

出力

off - on 
+0

を'const char * parser []'型の柔軟な配列メンバーです。ポインタ間変数宣言が意味を成すケースはごくわずかです。 – Lundin

+0

@Lundinはい、VLAの 'parser'はstructの最後のメンバーでなければなりませんか? – LPs

+0

ありがとうございました!ときどきあなたが考えるより簡単です;) – GURKE

4

メンバーparserはポインタです。

ポインタの配列に変更し、それを、初期設定が同じに保つことができるように:

const char *parser[2]; 

またはリテラル化合物または他の変数を使用: `parser`が可能であり、あるいは

.parser = (const char*[]){"off", "on"} 

const char* array[2] = {"off", "on"}; 
.parser = array 
+1

_Memberパーサはポインタのポインタです_...; – LPs

+0

@LPsいいえ、ポインタです。 Phrase *ポインタのポインタ*には意味がありません。 – 2501

関連する問題