Ошибка компиляции "переопределение типа структуры", хотя это первое определение для него

Все работало хорошо, пока я не переместил код из основного файла в новый класс, тогда у меня была следующая ошибка:

ошибка 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: путь.