-2

メタデータに関する情報を保持する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. 何かご意見は?

4

1 に答える 1

0

これはリンカー エラーであり、関数の実装が見つからないことを示します。関数を作成していないか、関数を含むソース ファイルをビルドに含めていません。

クラス定義で宣言しましたが、完全な定義がないと関数を呼び出すことができません。

于 2012-06-18T12:52:48.483 に答える