braces around scalar initializer for type 'int'

algemene C code
Berichten: 17
Geregistreerd: 31 Mei 2016, 13:07

braces around scalar initializer for type 'int'

Berichtdoor szjoin » 25 Mrt 2017, 20:42

De foutmelding (zie titel) krijg ik niet weg.

De exacte foutmelding is:
Code: Alles selecteren
/home/john/Arduino/ff4/ff4.ino: In function 'void loop()':
ff4:23: error: braces around scalar initializer for type 'int'
     },  };
         ^
exit status 1
braces around scalar initializer for type 'int'


De code:
Code: Alles selecteren
  int cube_matrix[3][3][2] = {
    {
      {{0,0}, {0,0}, {0,0}},
      {{0,0}, {0,0}, {0,0}},
      {{0,0}, {0,0}, {0,0}}
    },
    {
      {{0,0}, {0,0}, {0,0}},
      {{0,0}, {0,0}, {0,0}},
      {{0,0}, {0,0}, {0,0}}
    },
    {
      {{0,0}, {0,0}, {0,0}},
      {{0,0}, {0,0}, {0,0}},
      {{0,0}, {0,0}, {0,0}}
    },  };


Vraag: wat gaat hier fout?

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: braces around scalar initializer for type 'int'

Berichtdoor Koepel » 25 Mrt 2017, 20:51

Drie maal drie maal 2 is 18.
Je array kan dus 18 elementen bevatten, maar je hebt drie keer 18. Dus je array uitbreiden.

int cube_matrix[3][3][3][2]

int cube_matrix[][3][3][2]

Berichten: 17
Geregistreerd: 31 Mei 2016, 13:07

Re: braces around scalar initializer for type 'int'

Berichtdoor szjoin » 26 Mrt 2017, 14:27

Het werkt nu beter. Ik heb nog een vraag, welke ik na uren Googlen niet kan beantwoorden (ben duidelijk geen C-goeroe):

Wat wil ik bereiken?
Ik wil een matrix waarbij iedere waarde wederom een (verwijzing naar een) array bevat (deze array bevat vervolgens twee waarden).
Dit wil ik doen door eerst een setje arrays te maken ieder met de betreffende twee waarden (x- en y coordinaat).
Vanuit de matrix wil ik naar die arrays verwijzen zodat ik, door de rows en columns te scannen van de matrix, steeds de bijbehorende (x,y) waarden van het betreffende array kan uitlezen.

In onderstaand voorbeeld zijn a, b, c en d de diverse losse arrays met ieder een x en y waarde.
In 'Matrix' zijn deze arrrays opgenomen. 'Matrix' wordt gescand en per node beschik ik dan over een (x,y) paar.
Onderstaande werkt niet, maar hoe wel?

Code: Alles selecteren
int a[] = {0,1};
int b[] = {2,3};
int c[] = {4,5};
int d[] = {6,5};

int  Matrix[2][2] = {
  {a, b},
  {c, d}
};


void setup() {
  Serial.begin(9600);
  Serial.println("Ready");
}

void loop() {
  for (int y = 0; y < 2; y++) {
    for (int x = 0; x < 2; x++) {
      int nodeXY = Matrix[x, y];
      int element_x = nodeXY[0];
      int element_y = nodeXY[1];
      Serial.print("Coordinate (");
      Serial.print(x);
      Serial.print(",");
      Serial.print(y);
      Serial.print("): ");
      Serial.print(element_x);
      Serial.print(",");
      Serial.println(element_y);
      delay(1000);
    }
  }
}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: braces around scalar initializer for type 'int'

Berichtdoor shooter » 26 Mrt 2017, 16:01

als je van die a,b,c,d een structure maakt gaat het wel.
paul deelen
shooter@home.nl

Berichten: 17
Geregistreerd: 31 Mei 2016, 13:07

Re: braces around scalar initializer for type 'int'

Berichtdoor szjoin » 26 Mrt 2017, 17:49

Ik heb mij ingelezen en heb nu:

Code: Alles selecteren
typedef struct COORD {
  int x;
  int y;
};

// Node mapping (x,y coordinate pairs)
COORD a = {0, 1};
COORD b = {2, 3};
COORD c = {4, 5};
COORD d = {6, 5};


int Matrix[2][2][2] = {
  {&a, &b},
  {&c, &d}
};


void setup() {
  Serial.begin(9600);
  Serial.println("Ready");
  Serial.println(Matrix[0][0]);
}


Het spreekt voor zich dat ik compleet nieuw ben in dit vlak. De kunst is nu om de COORD uit te lezen. Ik krijg een compiler error op de Serial.println(Matrix[0][0]);

De '&' in de Matrix vindt-ie goed, en els ik deze weghaal klaagt hij. Ik denk dus dat dat in orde is (?)
Heb al veel geprobeerd maar de voorbeelden in Google helpen mij niet.

Graag ontvang ik nog wat verlossende tips...

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: braces around scalar initializer for type 'int'

Berichtdoor Koepel » 26 Mrt 2017, 18:44

Zoek de verschillen:

cpp code
int a[] = {0, 1};
int b[] = {2, 3};
int c[] = {4, 5};
int d[] = {6, 5};

int * pMatrix[2][2] = // two-dimensional array with pointers
{
{a, b},
{c, d}
};


void setup()
{
Serial.begin(9600);
Serial.println("Ready");
}

void loop()
{
for (int y = 0; y < 2; y++)
{
for (int x = 0; x < 2; x++)
{
int *pNodeXY = pMatrix[x][y]; // get the right pointer
int element_x = pNodeXY[0]; // the pointer is the same as the array it is pointing to.
int element_y = pNodeXY[1];
Serial.print("Coordinate (");
Serial.print(x);
Serial.print(",");
Serial.print(y);
Serial.print("): ");
Serial.print(element_x);
Serial.print(",");
Serial.println(element_y);
delay(1000);
}
}
}


cpp code
struct COORD {
int x;
int y;
};

// Node mapping (x,y coordinate pairs)
COORD a = {0, 1};
COORD b = {2, 3};
COORD c = {4, 5};
COORD d = {6, 5};


COORD * pMatrix[2][2] = { // two-dimensional array with pointers
{ &a, &b }, // A structure name is a variable not a pointer, use '&'.
{ &c, &d }
};

void setup() {
Serial.begin(9600);
Serial.println("Ready");
Serial.print(pMatrix[0][0]->x);
Serial.print(",");
Serial.println(pMatrix[0][0]->y);
Serial.print(pMatrix[1][1]->x);
Serial.print(",");
Serial.println(pMatrix[1][1]->y);
}

void loop()
{
}

Berichten: 17
Geregistreerd: 31 Mei 2016, 13:07

Re: braces around scalar initializer for type 'int'

Berichtdoor szjoin » 26 Mrt 2017, 20:12

Ik ga het bestuderen. Ik wil dit snappen.
Dank voor de uitleg!

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: braces around scalar initializer for type 'int'

Berichtdoor shooter » 26 Mrt 2017, 21:35

& is reference en dat is een pointer dus dat doet de compiler wel alleen komt er niet uit wat je wilt.
kijk maar bij koepel, onthou dat je het goede type houdt.

hou ook in de gaten welke diemnsie je hebt en wilt.
paul deelen
shooter@home.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Google [Bot] en 9 gasten