2011-02-14 10 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

これは、関数がコード内の他の場所に実装されていることを意味します。

2

おそらくあなたはすでに解決策を見つけましたが、解決策を再構築する私にとっては解決しました。

実装をヘッダーファイルから.cppファイルに移動しました。.pchファイルには既にこの情報があります。だから、私はこのエラーを修正するために再構築しなければならなかった。

7

元のヘッダーファイルにインクルードガードを使用しましたか?例えば

:それが含まれている各CPPに再定義に対する

#ifndef _TOOLS_H_ 
#define _TOOLS_H_ 

... your header body is here ... 

#endif 

このブロック。

0

あなたの質問には実際には答えていませんが、別の原因で同じ問題が発生しました。この回答はレコードのためだけです。

ヘッダーファイルにコードを追加するスタイルが非常に悪く、cMyClass() {}などのコンストラクター宣言が既に宣言ではなく定義であると考えられています(ヘッダーファイル内にあってもそうです)

これらの定義を実際の宣言に変更して削除します。 cMyClass();は、この特定の種類の問題を解決します。

関連する問題