我试图从另一个文件中的类声明一个对象。我已将#include "transfer.h"添加到我的metadata.cpp文件中,但是出现以下错误:

 metadata.o: In function `importMetadata':
 metadata.cpp:(.text+0x81): undefined reference to A::B::C::Transfer::Transfer()'
metadata.cpp:(.text+0x81): undefined reference to A::B::C::Transfer::~Transfer()'

并在transfer.h中定义了转移
namespace A{
  namespace B{
    namespace C{
       class Transfer {
            public:
               Transfer();
               ~Transfer();
               int copydata();
            ... more code goes here.
        };
    }
   }
}

文件transfer.cpp看起来像这样:
Transfer::Transfer(){
}
Transfer::~Transfer(){
}

我也在metadata.cpp文件的标题上执行using namespace A::B::C;。有人可以帮我吗?
int importMetadata()中的metadata.cpp函数中,我声明了Transfer transfer;,因此在metadata.cpp中,我正在执行'transfer.copydata();`。

最佳答案

希望您省略了transfer.cpp文件的一部分,但如果没有,则应定义命名空间以匹配您的头文件,如下所示:

namespace A{
  namespace B{
    namespace C{
        Transfer::Transfer(){
        }
        Transfer::~Transfer(){
        }
    }
  }
}

如果内嵌或上面完全定义了命名空间,则需要确保项目中包含transfer.cpp文件。似乎链接器无法找到您的源文件。

关于c++ - C++构造函数未定义引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11059970/

10-11 16:00