“functie heeft al een body”

Wat betekent dit?

1>c:\users\vitali\documents\visual studio 2010\projects\salam\tools.cpp(107): error C2084: function 'bool readXMLInteger(xmlNodePtr,const char *,int &)' already has a body
1>c:\users\vitali\documents\visual studio 2010\projects\salam\tools.h(52) : see previous definition of 'readXMLInteger'

tools.cpp(107):

bool readXMLInteger(xmlNodePtr node, const char* tag, int32_t& value)
{
    char* nodeValue = (char*)xmlGetProp(node, (xmlChar*)tag);
    if(nodeValue)
    {
        value = atoi(nodeValue);
        xmlFreeXOXL(nodeValue);
        return true;
    }
    return false;
}

tools.h(52)

bool readXMLInteger(xmlNodePtr node, const char* tag, int& value);

Antwoord 1, autoriteit 100%

Heb je include guards gebruikt in je originele header-bestand?

Bijvoorbeeld:

#ifndef _TOOLS_H_
#define _TOOLS_H_
... your header body is here ...
#endif

Dit blokkeert het opnieuw definiëren in elke cpp waar het is opgenomen.


Antwoord 2, autoriteit 64%

Het betekent dat op een bepaald moment je eigenlijke code opnieuw wordt ingelezen in de compile-stream, dus het lijken twee pogingen om de functie te definiëren (in plaats van te declareren).

Verdenk iets aan de manier waarop u de preprocessor-statements instelt.


Antwoord 3, autoriteit 27%

Misschien heb je de oplossing al gevonden, maar voor mij loste het opnieuw opbouwen van de oplossing het op.

Ik heb mijn implementatie verplaatst van het headerbestand naar het .cpp-bestand en het .pch-bestand had deze informatie al. Dus ik moest opnieuw opbouwen om deze fout te herstellen.


Antwoord 4, autoriteit 9%

Het betekent dat de functie ergens anders in uw code is geïmplementeerd.


Antwoord 5, autoriteit 9%

Het volgende is niet echt een antwoord op uw vraag, maar ik had hetzelfde probleem met een andere oorzaak. Dit antwoord is alleen voor de goede orde.

Sommige mensen hebben een zeer slechte stijl van het toevoegen van code aan het headerbestand, wat resulteert in constructordeclaraties zoals cMyClass() {}die al als een definitie worden beschouwd en niet alleen als een declaratie (ja , zelfs als het in het headerbestand staat)

Het verwijderen van die definities door ze te veranderen in daadwerkelijke verklaringen, b.v. cMyClass();lost dit specifieke probleem op.


Antwoord 6

Controleer ook of u een kopie van het bestand (.cxx of .cpp extensie) in dezelfde map hebt gemaakt. De functie wordt dus twee keer gedefinieerd.
Ik kreeg de foutmelding voor statische functies!


Antwoord 7

Luister, dit gaat stom klinken, maar voor iedereen die dit tegenkomt, zorg ervoor dat je niet per ongeluk het cpp-bestand hebt geprobeerd in plaats van de koptekst (klik met de rechtermuisknop op het bestand, kopieer het volledige pad, plak, het gebeurt …)

Ik bleef die bestandsextensie een tijdje bekijken


Antwoord 8

Je krijgt deze foutmelding omdat het headerbestand meerdere keren wordt aangeroepen vanaf andere locaties. Voeg #pragma oncein boven aan je headerbestand.
Het is de moeite waard om alle referenties te bekijken en dubbele oproepen te ontdekken. Of je hebt gekrulde brockets (laten we zeggen, leeg ;)) in je headerdefinitie.

Other episodes