只有一些内联函数无法解析
LNK2001 Only some inline functions unresolved?
本文关键字:函数 更新时间:2023-10-16
这个问题已经存在一段时间了,但我还没有找到任何真正的解决方案。基本上,我有几个类,它们大约有10-20个内联函数,每个函数只从类中检索简单的信息。它们都是单行函数它们都用不同的参数做同样的事情。大多数情况下,它们可以很好地编译,但偶尔编译器会在具有相同定义的函数中间指出一些未解决的问题。
例如,下面是我的类头定义的一部分,它具有公共作用域:
...
inline uint32_t debug_offset();
inline uint32_t debug_load_addr();
inline uint32_t dol_offset();
inline uint32_t fst_offset();
inline uint32_t fst_size();
inline uint32_t fst_max_size();
...
它们的定义如下:
...
uint32_t Header::debug_offset()
{
return VectorData::read<uint32_t>(ref(header), Offset::DebugOffset);
}
uint32_t Header::debug_load_addr()
{
return VectorData::read<uint32_t>(ref(header), Offset::DebugAddress);
}
uint32_t Header::dol_offset()
{
return VectorData::read<uint32_t>(ref(header), Offset::DOLOffset);
}
uint32_t Header::fst_offset()
{
return VectorData::read<uint32_t>(ref(header), Offset::FSTOffset);
}
uint32_t Header::fst_size()
{
return VectorData::read<uint32_t>(ref(header), Offset::FSTSize);
}
uint32_t Header::fst_max_size()
{
return VectorData::read<uint32_t>(ref(header), Offset::FSTMaxSize);
}
...
所有这些都可以很好地与其他20个左右类似的函数一起编译,除了fst_offset
抛出这个错误:
Error 1 error LNK2001: unresolved external symbol "public: unsigned int __thiscall Header::fst_offset(void)" (?fst_offset@Header@@QAEIXZ)
这也发生在其他几个类中。当所有的内联函数都正常时,我会有一两个函数抛出这个错误。简单的修复方法是只使用抛出错误的函数,并将body放在header中,但这会改变项目的布局,使其不一致。
这是一个编译错误吗?我是不是做了什么不一样的事而我却不知道?如果可能的话,我想避免在头文件中定义一些函数,而在源文件中定义另一些函数。
我想完整地回答这个问题,而不是仅仅根据我的发现接受一个非常基本的答案。
我最初的项目想要避免在单个类定义中混合函数原型和函数声明。要做到这一点,我试图在cpp文件中定义内联函数,就像你将正常函数一样,显然不起作用。
作为妥协,我发现您可以在头文件中定义函数,然后在类定义之外放置函数声明,就像在cpp文件中一样。这可能就是我在cpp文件中放入内联函数时所想到的。
的例子:
// example.h
class Example
{
public:
void foo();
void bar(); // Not defined in header, has to be in cpp file and non-inline
}
// Outside Example class definition.
inline void Example::foo()
{
// Code
}
根据我的理解,如果你使用内联,你必须在头文件中定义函数,而不仅仅是声明它。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗