2014-01-09 3 views
0

В настоящее время я делаю программу обработки изображений, и все идет неплохо, но вдруг появились ошибки fopen(). В моей предыдущей версии (без динамически распределенных массивов, без структур) все было хорошо, char name[50] использовался в fopen(name, "a"), и он работал хорошо, но теперь я не могу заставить его работать вообще. Что бы я ни выбрал fopen(), он не компилируется. Вот полное описание ошибки:C fopen() error: несовместимые типы при назначении типа 'FILE' из типа 'struct FILE *'

obsluga.c:30:8: error: incompatible types when assigning to type ‘FILE’ from type ‘struct FILE *’ plik2=fopen(name, "a");

фрагмент кода (я мог бы опубликовать больше, но это должно быть никакого отношения)

char name[50]; 
plik2=fopen(name, "a"); 

То, что я действительно хочу, чтобы перейти к fopen() имени файла, содержащегося в char *output, который находится в соответствующая структура, но, к сожалению, даже самый простой способ не работает прямо сейчас.

+4

Похоже, что 'plik2' имеет тип' FILE' вместо 'FILE *' –

+0

Предоставьте полный, но минимальный пример. –

+2

Как вам удалось сделать вывод о том, что декларация plik2 не имеет значения? –

ответ

2

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

FILE plik2; 

вместо правильного:

FILE *plik2; 

Treat FILE * как непрозрачный типа. Вы всегда пишете FILE * (почти всегда, иногда вы можете использовать FILE **) и никогда не пишите FILE.

+0

Вы имеете в виду «Treat' FILE' как непрозрачный тип »? –

+1

Либо или оба; не ткните внутри того, что указывает 'FILE *'; используйте 'FILE *' везде; не используйте 'ФАЙЛ' когда-либо. Я думаю, что я имею в виду «использовать' FILE * 'как тип» (исключая непрозрачность из обсуждения). Я не уверен, что мое использование неверно; ваша альтернатива не будет ошибкой. –

+2

@KeithThompson Вероятно лечить * обе * как непрозрачный. Никогда не разыскивайте «ФАЙЛ *», например ... – Roddy

Смежные вопросы