メタデータに関する情報を保持するnamespace A::B::C
も含まれている内で宣言されている Metadata というクラスがあります。struct copyInfo
そのため、Metadata にはデフォルトのコンストラクター/デストラクタしかなく、Metadata から呼び出されたメンバー関数を使用しようとすると、
importMetadata(vector<copyInfo> &info, const string &src, const string &dst, const int &job:
次のエラーが表示されます。
import_helper.cpp:(.text+0x246): undefined reference to
A::B::C::Metadata::importMetadata(std::vector<A::B::C::copyInfo, std::allocator<A::B::C::copyInfo> >&,
std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&,
std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&)
namespace A{
namespace B{
namespace C{
class Metadata{
Metadata();
~Metadata();
importMetadata(vector<copyInfo> &seq, const string &src,
const string &dst, const int &job);
/* more code down here */
};
}
}
}
今、Metadata
私は持っています:
wrapperMetadataImport
その関数は、 に属するというラッパー C++ 関数から呼び出されていますimport_helper.cpp
。
#include "Metadata.h"
using namespace A::B::C;
int wrapperMetadataImport(const char * src, const char * dest, const int * jobid){
Metadata mtd;
string src = srcName;
string dest = destName;
vector<copyInfo> sequence;
/* add elemens to the vector sequence */
if((ret = mtd.importMetadata(sequence,
src, dest, *jobid)) == EC_success){
/* more code down here */
なぜ私はそれを得ているのか分かりません。.h および .cpp ファイルを確認しましたが、すべて問題ないように思えます。ランタイムリンクの問題だと思います。名前空間はそのままである必要があります: A::B::C
. 何かご意見は?