Я получаю много "переопределения x... x, ранее определенных здесь". Пожалуйста, что означает эта ошибка?
Ошибка компилятора GCC: "переопределить... ранее определенные"
Ответ 1
Вам нужно ограничить каждый файл включением только один раз. Вы можете сделать это двумя способами.
1) В верхней части ваших файлов заголовков поставьте:
#pragma once
Или 2), если ваш компилятор не поддерживает это, поместите вверх/конец ваших файлов заголовков:
#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif
Замените MYFILE именем вашего файла и замените... содержимым файла заголовка.
Ответ 2
Ошибка означает, что есть символ, который был определен в одном месте, и альтернативное определение было сделано в другом месте.
Это может произойти, если в таких случаях, как:
- если вы определяете две функции с тем же именем
- если существует несоответствие между функцией и прототипом
- вы называете нетривиальную функцию до ее определения и без прототипа
В этом последнем случае будет несоответствие между реальной функцией и "неявным объявлением", которое предполагает компилятор, когда у него нет прототипа для использования.
Эти ситуации можно избежать:
- Обеспечение того, что прототипы функций объявляются только один раз
- Обеспечение того, чтобы все функции имели уникальные имена в пределах своей области (т.е. внутри файла, если они
static
, или уникальные, если они используются между объектными файлами) - Будьте осторожны при использовании операторов
extern
в исходных файлах для объявления прототипов. Лучше использовать прототип из соответствующего файла заголовка. - Убедитесь, что все функции имеют прототипы - либо в исходном файле в случае функций
static
, либо в файле заголовка, если они должны использоваться другими объектными файлами. - Убедитесь, что все файлы заголовков могут быть включены только один раз для каждого исходного файла, используя любую из конструкций, предложенных Мехрдадом и Брайаном Р. Бонди.
Ответ 3
Вы, вероятно, дважды включаете заголовочный файл. Убедитесь, что ваши файлы заголовков окружены операторами #ifndef
.
http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html