Вероятно, плохо с использованием структур и typedef в заголовке - PullRequest
0 голосов
/ 26 января 2012

Здравствуйте, как переписать возможно плохую конструкцию?
Я пытался спросить, как это исправить, чтобы он работал там , но, возможно, это все плохая концепция. Любое другое решение для этого? Он скомпилирован в Eclipse с использованием GCC для Linux, скомпилирован как код на C.

file first.h

#ifndef FIRST_H_
#define FIRST_H_

typedef struct foo
{
    int a;
    char *c;
} foo_struct;

#endif /* FIRST_H_ */

file second.h:

#ifndef SECOND_H_
#define SECOND_H_

#include "first.h"

typedef struct wtf
        {
        foo_struct *poleFOO[5];
        }wtf_struct;

#endif /* SECOND_H_ */

Конкретно в файле second.h строка foo_struct * poleFOO [5]; бросает: "foo_struct не может быть решена" Я работаю в Linux Ubuntu 11.10, используя gcc в редакторе Eclipse для C и C ++.

Ответы [ 4 ]

3 голосов
/ 27 января 2012

Хорошо, это не ошибка компилятора, а Eclipse. Просто Googl'ing ошибка "не может быть решена" указывает мне на статьи, говорящие о Eclipse CDT (подсистема eclipse для разработки C / C ++).

Так что это как-то связано с Eclipse, ваши C-заголовки выглядят синтаксически правильно. Я считаю, что без C-файла, но только с заголовками, Eclipse не знает, как анализировать заголовки только для создания собственной индексной базы данных (должен использоваться для intellisense, списка символов и т.

Я предлагаю вам вставить простой C-файл, включающий second.h, и с функцией main(), чтобы шаг ссылки также проходил, например:

#include "second.h"

int main() {
    wtf_struct my_variable;
    return 0;
}
1 голос
/ 17 апреля 2019

У меня была та же ошибка: «vuint16 - не удалось разрешить» для обернутого типа в typedef (упоминается ниже), и она была успешно устранена путем перестроения индекса в среде Eclipse (щелкните правой кнопкой мыши проект -> Index -> Rebuild ) Примечание: это не ошибка компилятора!

[headerfile1: can.h]
#define vuint8 uint8

[headerfile2: can_local.h]
#include "Can.h" /* include all needed types */
typedef struct sCanRxFullInfoStruct
{
  vuint16 objectNumber; //error line
} tCanRxFullInfoStruct;
0 голосов
/ 16 марта 2013

У меня была такая же проблема после создания набора typedef, которые переносят другие типы.Решением было перестроить Eclipse Index - щелкните правой кнопкой мыши на проекте -> Index -> Rebuild

0 голосов
/ 26 января 2012

Я подозреваю, что вы создали (и включили) два заголовка, которые имеют одинаковую защиту заголовков

#ifndef FIRST_H_
#define FIRST_H_
...