2011-02-14 88 views
3

這是什麼意思?「功能已經有了身體」

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

請確保您正在查看與編譯器相同的文件副本(例如,不同的路徑,未保存的更改等) –

+0

歡迎使用堆棧溢出!你上面發佈的代碼看起來很好,所以我懷疑錯誤是由其他內容引起的。檢查以下常見錯誤 - 您是否在頭文件末尾包含.cpp文件?你有沒有在這個過渡期間做一個乾淨的構建?你有多個.cpp文件'#include'對方?這些(或者完全不同的)中的任何一個都可能是錯誤的,但沒有更多的信息,我認爲我不能提供幫助。 – templatetypedef

回答

5

這意味着,在某一點實際代碼被重新讀入編譯流,所以它似乎有兩次嘗試定義(而不是聲明)該函數。

懷疑您設置預處理器語句的方式。

2

這意味着該功能在您的代碼中的其他地方執行。

2

也許你已經找到了解決方案,但對我來說重建解決方案修復了它。

我將我的實現從頭文件移動到.cpp文件和.pch文件已經有此信息。所以,我不得不重建來修復這個錯誤。

7

您是否在原始頭文件中使用了包含守衛?

例如:

#ifndef _TOOLS_H_ 
#define _TOOLS_H_ 

... your header body is here ... 

#endif 

防止再次限定在其被包括在每個cpp該塊。

0

以下實際上並沒有回答你的問題,但我遇到了與其他原因相同的問題。這個答案僅用於記錄。

有些人向頭文件添加代碼的方式非常糟糕,導致像cMyClass() {}這樣的構造函數聲明已被認爲是一個定義,而不僅僅是一個聲明(即使它位於頭文件中也是如此)

通過將這些定義更改爲實際聲明來刪除這些定義,例如cMyClass();將解決這種特殊類型的問題。