【问题标题】:Undefined symbol error when use inline methods in C++ [duplicate]在 C++ 中使用内联方法时出现未定义符号错误 [重复]
【发布时间】:2020-05-31 17:19:49
【问题描述】:

当我将方法设为inline 时,编译失败并出现以下错误:

未定义符号:'int CPositionRequestor::State(void) const (?State@CPositionRequestor@@QBEHXZ)'

头文件:

class CPositionRequestor : public CActive
    {
    // ...

private:
    TInt iState;

public:
    inline TInt State() const;
    }

CPP 文件:

inline TInt CPositionRequestor::State() const
    {
    return iState;
    }

【问题讨论】:

  • 它没有内联定义,这没有帮助。要么内联,要么将函数体写入 .h 文件。
  • 这样的问题应该带有minimal reproducible example,其中包括用于编译的代码和命令。
  • 内联函数实现必须在它使用的每个翻译单元中可见。因此,如果您只在该 cpp 文件中使用它应该没问题,除非您尝试在它被定义之前使用它。但是由于您显然有链接器错误,您正在尝试从不同的 cpp 文件或在同一个 cpp 文件中但在定义之前使用它。

标签: c++ oop inline symbian


【解决方案1】:

内联函数需要它的定义在调用该函数的文件中可用。

因此,如果您在一个 cpp 文件中定义它并尝试在第二个 cpp 文件中调用它,那么它将找不到。

您需要做的是将此定义移动到 h 文件中。 (只需在类定义之后剪切并粘贴它)。

或者正如@einpoklum 所注意到的,如果您不需要它,请从所有定义中删除内联。

【讨论】:

  • ... 如果没有必要,请删除inline
  • @robert-andrzejuk 你是对的,这个方法也用在另一个 cpp 文件中。将方法的主体移动到类定义解决了这个问题。谢谢。
猜你喜欢
  • 2012-05-01
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2011-02-27
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多