«Функция уже имеет тело» - PullRequest
       1

«Функция уже имеет тело»

5 голосов
/ 14 февраля 2011

Что это значит?

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

Ответы [ 5 ]

9 голосов
/ 06 декабря 2012

Использовали ли вы включение охраны в свой исходный заголовочный файл?

Например:

#ifndef _TOOLS_H_
#define _TOOLS_H_

... your header body is here ...

#endif

Блокирует переопределение в каждом cpp, где он включен.

6 голосов
/ 14 февраля 2011

Это означает, что в какой-то момент ваш реальный код перечитывается в поток компиляции, поэтому кажется, что есть две попытки определения (а не объявления) функции.

Подозреваю, что вы настроили операторы препроцессора.

3 голосов
/ 21 сентября 2012

Возможно, вы уже нашли решение, но для меня восстановление решения исправило его.

Я переместил свою реализацию из файла заголовка в файл .cpp, и файл .pch уже имел эту информацию. Итак, мне пришлось пересобрать, чтобы исправить эту ошибку.

2 голосов
/ 14 февраля 2011

Это означает, что функция реализована где-то еще в вашем коде.

1 голос
/ 31 января 2013

Следующее фактически не отвечает на ваш вопрос, но у меня была та же проблема с другой причиной.Этот ответ только для записи.

У некоторых людей очень плохой стиль добавления кода в файл заголовка, что приводит к объявлениям конструктора, таким как cMyClass() {}, который уже считается определением, а не просто объявлением(да, даже если он находится в заголовочном файле)

Удаление этих определений путем преобразования их в реальные объявления, например cMyClass();, решит эту конкретную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...