Ошибка компиляции "переопределение типа структуры", хотя это первое определение для него
Все работало хорошо, пока я не переместил код из основного файла в новый класс, тогда у меня была следующая ошибка:
ошибка C2011: 'color1': переопределение типа 'struct'
struct color1
{
color1()
{
red = green = blue = 0;
}
color1(float _red, float _green, float _blue)
{
red = _red;
green = _green;
blue = _blue;
}
float red, green, blue;
};
Любая идея?
Ответы
Ответ 1
Если компилятор говорит, что он переопределен, значит, это возможно.
Мои психические навыки отладки говорят мне, что вы переместили структуру из исходного файла в заголовочный файл и забыли включить защитники в этом заголовке, который затем включается несколько раз в исходный файл.
EDIT: Как правило, я обычно предлагаю избегать ведущих подчеркиваний. В некоторых случаях (например, за ними следует заглавная буква) они зарезервированы для реализации, и проще всего просто использовать ведущий _
вместо того, чтобы надеяться, что вы запомните все правила.
Ответ 2
Из фрагмента выше я не могу понять, что что-то не так.
Но обычно эта ошибка означает, что вы включаете одни и те же файлы заголовков несколько раз. Разве вы не забудете добавить стандартные защитные файлы для включенных файлов?
#ifndef MY_HEADER_FILE_
#define MY_HEADER_FILE_
// here is your header file code
#endif
Ответ 3
У вас может быть определение структуры в файле заголовка.
Пусть
#pragma once
в начале заголовка, где определена структура, он решает проблему.
Ответ 4
У меня была та же проблема, и, к счастью, я не долго думал, что это просто глупая ошибка.
Дело в том, что у меня была резервная копия моего проекта на другом диске (D :), но весь код был установлен на диске C: когда явно был указан полный путь. Я создал его по пути C: и всегда использовал этот путь, но случайно открыл проект из D и подумал, что это одно и то же, поэтому при компиляции он включался дважды, потому что в некоторых случаях он включал код из C: путь и другие от D: путь.