Можно ли создать вложенный массив struct? Как? - PullRequest
1 голос
/ 30 марта 2012

Моя цель с этим фрагментом кода состоит в том, чтобы создать массив из 1000 позиций, содержащий структуру, которая содержит int (для использования в качестве счетчика) и вложенную структуру, инициализированную как массив из 100 позиций.Правильно ли я проектирую это?

Как, например, я пытаюсь получить двумерную таблицу из 1000 столбцов на 100 строк, где каждая из этих 100 строк имеет упомянутое ранее int для использования в качестве переменной счетчика / индексаи каждая позиция в массиве из 100 строк должна быть вложенной структурой!Вот что я получил до сих пор:

#define DATA_MAX 1000
#define MAX_CHAR_TIPO_MOV 60
#define MAX_CHAR_DESCRICAO 60
#define MAX_MOVIMENTOS 100
#define BUFFLEN 1024

char buffer[BUFFLEN];

typedef struct{
    int montante;
    int data;
    int periodicidade;
    char tipo[MAX_CHAR_TIPO_MOV];
    char descricao[MAX_CHAR_DESCRICAO];
}sistema;

typedef struct{
int indice;
struct sistema tabela[MAX_MOVIMENTOS]; /* Compiler gives me an error here: array type has incomplete element type */
}movimentos;

movimentos c[DATA_MAX];

/* Function to initialize arrays/structs in order to eliminate junk */


void inicializarfc(movimentos c[])
{
    int i, j;
//percorre o vector estrutura
for(i=0; i<DATA_MAX; i++)
    for(j=0; j<MAX_MOVIMENTOS; j++)
{
    c[i].[j].data = -1;
    c[i].[j].montante = -1;
    c[i].[j].periodicidade = -1;
    memset((c[i].[j].tipo), ' ', sizeof(c[i].[j].tipo));
    memset((c[i].[j].descricao), ' ', sizeof(c[i].[j].descricao));
   }
}

Если действительно возможно создать то, что я спрашиваю, как мне получить доступ к членам структуры?Компиляция в Codeblocks 10.05 в W7 с использованием GCC.

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Вам не нужно использовать ключевое слово struct перед typedef.

Просто скажите:

sistema tabela[MAX_MOVIMENTOS];

Чтобы получить доступ к участникам, просто скажите:

movimentos m;
/* initialize data */
int x = m.tabela[0].montante; // accesses montante field of tabela[0]
0 голосов
/ 30 марта 2012

Давайте посмотрим на ваши объявления:

typedef struct{
   int montante;
   int data;
   int periodicidade;
   char tipo[MAX_CHAR_TIPO_MOV];
   char descricao[MAX_CHAR_DESCRICAO]; 
}sistema;  

typedef struct{ 
   int indice; 
   struct sistema tabela[MAX_MOVIMENTOS];
}movimentos;

Проблема в том, что вы ищете тип с именем struct sistema, но вы еще не объявили такой тип; вместо этого вы объявили анонимный тип структуры и создали для него имя определения типа sistema. Чтобы получить доступ к типу с именем struct sistema, вам нужно будет указать тег struct в определении:

struct sistema { ... };

Тег struct sistema и имя typedef sistema находятся в разных пространствах имен; Вы могли бы написать

typedef struct sistema { ... } sistema;

и используйте оба sistema и struct sistema взаимозаменяемо, хотя это, вероятно, может сбить с толку.

В этом случае проще всего изменить

struct sistema tabela[MAX_MOVIMENTOS];

до

sistema tabela[MAX_MOVIMENTOS];

в типе movimentos.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...