ошибка: ожидается '=', ',', ';', 'asm' или '__attribute__' перед маркером '*' в C - PullRequest
1 голос
/ 07 апреля 2011

У меня есть следующие объявления

FILE *fptr; FILE *optr;

в часах У меня есть основной файл main.c, который открывает эти файлы. Я получаю вышеуказанную ошибку, если я помещаю объявления в заголовочный файл. Если я помещу его в main.c, то получу многократные ошибки определения типа

src\main.o:main.c:(.bss+0xc88): multiple definition of <code>rcount' src\new_algo.o:new_algo.c:(.bss+0xc88): first defined here src\main.o:main.c:(.bss+0xc8c): multiple definition of Конди» src \ new_algo.o: new_algo.c :(. bss + 0xc8c): сначала определено здесь

Ответы [ 4 ]

1 голос
/ 07 апреля 2011

То, что у вас есть в algo.h - это определение , а не декларация.Если у вас есть FILE * fptr;FILE * optr; как в исходном, так и в заголовочном файле, тогда вы объявляете переменные дважды.

Вам необходимо:

algo.h

extern FILE *fptr; 
extern FILE *optr;

algo.c

FILE *fptr; 
FILE *optr;
1 голос
/ 07 апреля 2011

Похоже, что вы (1) не включили <stdio.h>, где вы используете FILE, и / или (2) у вас есть некоторый не static исполняемый код или не extern определения переменных в ваши заголовки (и / или #include в C-файле).

Первое обычно приводит к тому, что FILE не будет определено (или будет typedef 'для типа, который не существует, в некоторых случаях). Второе приведет к тому, что материал будет определен в каждой единице перевода, которая включает в себя файл, что запутает компоновщик.

Исправить: (1) #include <stdio.h> в файле, где используется FILE, и (2) переместить общие определения из заголовков в файл .c (и / или объявить их как static или extern при необходимости) и только #include .h файлов.

0 голосов
/ 22 ноября 2011

Ошибки компоновщика не имеют ничего общего с опубликованными вами переменными FILE.

В вашем источнике есть две переменные с именами rcount и condi, которые в соответствии с компоновщиком определены в обоихваши исходные файлы.Думаю, причина в том, что вы определяете эти переменные в заголовочном файле, который включен в оба исходных файла.Некоторые старые компиляторы все еще не могут справиться с этим.

0 голосов
/ 07 апреля 2011

Звучит так, будто вы не включили stdio Добавить

#include <stdio.h>

в вашем заголовочном файле над этими объявлениями.

...