-2

我有一个名为 Metadata 的类,它在 中声明namespace A::B::C,它还包含struct copyInfo,它保存有关元数据的信息。所以,元数据只有它的默认构造函数/析构函数,当我尝试使用来自元数据的成员函数时,调用 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我有:

该函数是从一个名为 的包装 C++ 函数调用wrapperMetadataImport的,该函数属于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 回答