Ошибка компилятора GCC: “переопределение … ранее определенный”

OK. И нашел решение этой проблемы: на SetInitializers () просто поставьте true в скобках ... Черт ... Так просто ... 2 дня ...

13
задан 2 April 2009 в 01:00
поделиться

3 ответа

Необходимо ограничить каждый файл от того, чтобы быть включенным только однажды. Можно сделать это 2 способами.

1) Наверху Ваших помещенных заголовочных файлов:

#pragma once

Или 2) если Ваш компилятор не поддерживает это, поместите в вершину/конец своих заголовочных файлов:

#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif

Замените MYFILE названием Вашего файла и замените... содержанием заголовочного файла.

32
ответ дан 1 December 2019 в 17:40
поделиться

Ошибка означает, что существует символ, который был определен в одном месте, и альтернативное определение было сделано в другом месте.

Это может произойти если в случаях как:

  • если Вы определяете две функции с тем же именем
  • если существует несоответствие между функцией, и это - прототип
  • Вы вызываете нетривиальную функцию, прежде чем она была определена, и без прототипа

В этом последнем случае будет несоответствие между реальной функцией и "неявным объявлением", которое принимает компилятор, когда это не имеет прототипа для использования.

Этими ситуациями можно избежать:

  • Обеспечение, что прототипы функции только объявляются однажды
  • Обеспечение, чтобы все функции имели уникальные имена в своем объеме (т.е. в файле, если они static, или уникальный, если они используются между объектными файлами),
  • Будьте осторожны при использовании extern операторы в исходных файлах для объявления прототипов. Лучше использовать прототип от соответствующего заголовочного файла.
  • Удостоверьтесь, чтобы все функции имели прототипы - любой в исходном файле в случае static функции, или в заголовочном файле, если они должны использоваться другими объектными файлами.
  • Удостоверьтесь, что все заголовочные файлы могут только быть включены однажды для каждого исходного файла, при помощи любой из конструкций, предложенных Mehrdad и Brian R. Bondy
11
ответ дан 1 December 2019 в 17:40
поделиться

Вы, вероятно, включаете заголовочный файл дважды. Удостоверьтесь, что Ваши заголовочные файлы окружаются #ifndef операторы.

http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html

7
ответ дан 1 December 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: