Почему я получаю это переопределение ошибки класса?

Извинения за дамп кода:

gameObject.cpp:

#include "gameObject.h"
class gameObject
{
    private:
    int x;
    int y;
    public:
    gameObject()
    {
    x = 0;
    y = 0;
    }

    gameObject(int inx, int iny)
    {
        x = inx;
        y = iny;
    }

    ~gameObject()
    {
    //
    }
    int add()
    {
        return x+y;
    }
};

gameObject.h:

class gameObject
{
    private:
    int x;
    int y;
    public:
    gameObject();

    gameObject(int inx, int iny);
    ~gameObject();
    int add();
};

Ошибки:

||=== terrac, Debug ===|
C:\terrac\gameObject.cpp|4|error: redefinition of `class gameObject'|
C:\terrac\gameObject.h|3|error: previous definition of `class gameObject'|
||=== Build finished: 2 errors, 0 warnings ===|

Я не могу понять, что не так. Помогите?

Ответы на вопрос(8)

class gameObject в обоих ваших.cpp файл и ваш.h файл.
Это создает ошибку переопределения.

Вы должны определить класс,ОДИН РАЗ, вОДИН место. (Конвенция гласит, что определение в.hи вся реализация находится в.cpp)

Пожалуйста, помогите нам лучше понять, с какой частью сообщения об ошибке у вас возникли проблемы?

Первая часть ошибки говорит, что класс был переопределен вgameObject.cpp
Вторая часть ошибки говорит, что предыдущее определение вgameObject.h.

Насколько понятнее может быть сообщение?

 miguel.martin13 июл. 2013 г., 07:56
Это может быть понятно для вас, но, вероятно, не ясно для новичков

добавить в заголовочные файлы

#pragma once
 IgorGanapolsky07 июн. 2016 г., 17:53
Чего это добьется?
Решение Вопроса

включаете файл заголовка в файл * .cpp и определяете класс во второй раз, поскольку первое определение перетаскивается в модуль перевода файлом заголовка. Но только одно определение класса gameObject допускается для каждой единицы перевода.

На самом деле вам не нужно определять класс во второй раз только для реализации функций. Реализуйте функции следующим образом:

#include "gameObject.h"

gameObject::gameObject(int inx, int iny)
{
    x = inx;
    y = iny;
}

int gameObject::add()
{
    return x+y;
}

так далее

 Dataflashsabot19 сент. 2010 г., 18:34
Ахххх, спасибо!

Если у вас возникли проблемы с шаблонами или вы вызываете класс из другого файла .cpp

попробуйте использовать «#pragma Once» в заголовочном файле.

 JJJ15 мар. 2019 г., 05:05
Это было уже опубликовано как ответ на тот же вопросВот.

Если вы намереваетесь реализовать методы в файле CPP, сделайте так:

gameObject::gameObject()
{
    x = 0;
    y = 0;
}
gameObject::~gameObject()
{
    //
}
int gameObject::add()
{
        return x+y;
}

Вы должны обернуть.h файл вроде так:

#ifndef Included_NameModel_H

#define Included_NameModel_H

// Existing code goes here

#endif
 G. LC03 авг. 2018 г., 05:02
Это сработало для меня

который должен решить вашу проблему. Проблема заключается в том, что он переходит из заголовка в функцию, а затем обратно в заголовок, поэтому он переопределяет класс со всеми препроцессорами (#include) несколько раз.

реализация в файле cpp должна быть в форме

gameObject::gameObject()
    {
    x = 0;
    y = 0;
    }
gameObject::gameObject(int inx, int iny)
    {
        x = inx;
        y = iny;
    }

gameObject::~gameObject()
    {
    //
    }
int gameObject::add()
    {
        return x+y;
    }

не входит в блок определения класса gameObject {}

 Ben Voigt19 сент. 2010 г., 18:36
В дополнение к этому исправлению, конструкторы должны использоватьт е р-инициализатора-лист а не тело конструктора для инициализации переменных-членов.
 frag19 сент. 2010 г., 18:48
абсолютно согласен (хотя и не связан с вопросом) (+1 от меня)

Ваш ответ на вопрос