Waarom krijg ik deze herdefiniëring van Class Fout?

Excuses voor de code Dump:

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();
};

Fouten:

||=== 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 ===|

Ik kan niet achterhalen wat er mis is. Hulp?


Antwoord 1, Autoriteit 100%

U definieert de klasse in het kopbalbestand, bevat het koptekstbestand in een bestand * .cpp en definieert de klasse een tweede keer omdat de eerste definitie door het koptekstbestand in de vertaaleenheid wordt gesleept. Maar slechts één gameObject class-definitie is toegestaan ​​per vertaalunit.

U hoeft de klasse een tweede keer niet te definiëren om de functies te implementeren. Implementeer de functies zoals deze:

#include "gameObject.h"
gameObject::gameObject(int inx, int iny)
{
    x = inx;
    y = iny;
}
int gameObject::add()
{
    return x+y;
}

enz.


Antwoord 2, autoriteit 20%

de implementatie in het cpp-bestand moet de vorm hebben

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

niet binnen a
klasse spelObject
{
}
definitie blok


Antwoord 3, autoriteit 16%

header-bestanden toevoegen

#pragma once

Antwoord 4, autoriteit 10%

U moet het bestand .hals volgt inpakken:

#ifndef Included_NameModel_H
#define Included_NameModel_H
// Existing code goes here
#endif

Antwoord 5, autoriteit 8%

Als je problemen hebt met sjablonen of als je de klas aanroept vanuit een ander .cpp-bestand

probeer ‘#pragma één keer’ in je headerbestand te gebruiken.


Antwoord 6, autoriteit 6%

Je definieert dezelfde klas twee keer, daarom.

Als het uw bedoeling is om de methoden in het CPP-bestand te implementeren, doe dat dan ongeveer als volgt:

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

Antwoord 7

Je definieert het class gameObjectin zowel je .cpp-bestand als je .h-bestand.
Dat is een herdefinitiefout.

Je moet de klasse, ONCE, op EENplaats definiëren.
(conventie zegt dat de definitie in de .hstaat, en alle implementatie in de .cpp)

Help ons alstublieft beter te begrijpen, met welk deel van de foutmelding had u problemen?

Het eerste deel van de fout zegt dat de klasse opnieuw is gedefinieerd in gameObject.cpp
Het tweede deel van de fout zegt dat de vorige definitie in gameObject.hstaat.

Hoeveel duidelijker zou de boodschap kunnen zijn?


Antwoord 8

Voeg een paar #ifndef name #define name #endif preprocessor toe die uw probleem zouden moeten oplossen.
Het probleem is dat het van de header naar de functie gaat en dan terug naar de header, dus het herdefinieert de klasse met alle preprocessor (#include) meerdere keren.

Other episodes