2017-09-11 30 views
-1

XMLを使用してコード内に2つのライブラリを結合したいと思います。 ここで多くの記事を読んだ後、私は名前空間環境に小さなライブラリをラップすることに決めました。C++で名前空間が衝突し、解決策を見つけることに固執しました

ここに私の問題が始まります。今、私はxmlParser.cppでエラーが出る

#include "xmlParser.h" 
#include "..." 
using namespace xmlparser; 

stuff that belongs to source code ... 

xmlParser.cpp

xmlParser.h

#include<...> 
namespace xmlparser 
{ 

stuff that belongs to headerfile 

} 

を(コードの〜2000行があるため、擬似コードを使用しI'will) (ここではすべてがうまくいったと思います)

xmlparser :: stringDup(char const *、int) 'への未定義の参照

エラーが発生し

ライン:ソース内

XMLDLLENTRY XMLSTR stringDup(XMLCSTR source, int cbData=-1); 

:ヘッダーファイルで

XMLNode XMLNode::createXMLTopNode(XMLCSTR lpszName, char isDeclaration) { return XMLNode(NULL,stringDup(lpszName),isDeclaration); } 

// Duplicate a given string. 
XMLSTR stringDup(XMLCSTR lpszData, int cbData) 
{ 
if (lpszData==NULL) return NULL; 

XMLSTR lpszNew; 
if (cbData==-1) cbData=(int)xstrlen(lpszData); 
lpszNew = (XMLSTR)malloc((cbData+1) * sizeof(XMLCHAR)); 
if (lpszNew) 
{ 
    memcpy(lpszNew, lpszData, (cbData) * sizeof(XMLCHAR)); 
    lpszNew[cbData] = (XMLCHAR)NULL; 
} 
return lpszNew; 
} 

のXMLParser `もっと未定義参照:: stringDup(チャーCONST *、int) 'が与えられます。 体系的なエラーがありましたか?あなたの源で

+0

ですから、名前空間内の関数を宣言したが外にそれを定義しますか? – tkausl

+0

usingディレクティブを削除します。名前空間を開いて閉じ、そのスコープ内でそれらの関数を定義します。 – StoryTeller

+0

名前空間で関数を定義するにはどうすればよいですか?ネームスペース{}環境にコードをラップしますか? –

答えて

1

名前空間スコープにxmlParser.cppの内容を置くことを忘れてしまいました「名前空間のXMLParserを変更する必要があります{xxxxxx} "? xmlParser.cppの

内容もブローのように、名前空間の名前空間スコープに置かれる必要があります。

#include "xmlParser.h" 
    #include "..." 
    namespace xmlparser 
    { 
     *** the contents of xmlParser.cpp *** 
    } 
1

あなたは

XMLSTR stringDup(XMLCSTR lpszData, int cbData) 

XMLSTR xmlparser::stringDup(XMLCSTR lpszData, int cbData) 

など

+0

はい、これは正解ですが、私はそのように多くの行に変更する必要があります。 xmlparser { *** xmlParser.cpp *** }の内容の名前空間を使用します。 –

関連する問題