gpt4 book ai didi

C++构造函数 undefined reference

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:31 26 4
gpt4 key购买 nike

我正在尝试从另一个文件的类中声明一个对象。我已将 #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 在 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 文件的 header 上执行 using namespace A::B::C;。有人可以帮我吗?在 metadata.cpp 的函数 int importMetadata() 中,我声明了 Transfer transfer; 所以在 metadata.cpp 我在做 'transfer.copydata();`

最佳答案

因为您有链接器错误而不是编译器错误,这告诉您您的#include 语句正在执行您想要的操作并且编译器识别了 Transfer 类及其构造函数。当链接器试图在它被告知要链接的 .o 或 .lib 文件之一中找到对 Transfer::Transfer() 函数的实现的引用但找不到时,就会发生错误。

您可能有一个 transfer.cpp 与 transfer.h 一起使用,并且此文件缺少 Transfer 构造函数和析构函数的实现。这可能是因为函数完全缺失或被意外地定义为不同的签名。

因此 transfer.cpp 应该类似于:

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

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

另一种可能性是您正在尝试链接从图书馆转移的实现。在这种情况下,您需要告诉您的链接器使用 .lib 文件作为输入。此语法将取决于您使用的编译器。

关于C++构造函数 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com