可以在同一个头文件c ++文件中调用内联函数吗?

时间:2018-03-09 16:41:59

标签: c++ inline

请参阅以下课程

class wdt
{
   public:
      inline static constexpr uint32_t wdtGetTimeoutValue( uint32_t xTimeInNs )
      {
         return (wdt_get_timeout_value((xTimeInNs*1000),BOARD_FREQ_SLCK_XTAL));
      }

   private:
     static constexpr const uint32_t mMsWdtTimeout = wdtGetTimeoutValue(mMsTaskInterval);

}

这是wdt_get_timeout_value(),将被调用。

uint32_t wdt_get_timeout_value(uint32_t ul_us, uint32_t ul_sclk)
{
      uint32_t max, min;

      min = WDT_SLCK_DIV * 1000000 / ul_sclk;
      max = min * WDT_MAX_VALUE;

      if ((ul_us < min) || (ul_us > max)) {
        return WDT_INVALID_ARGUMENT;
      }

      return WDT_MR_WDV(ul_us / min);
 }

我收到了以下错误:

error: 'static constexpr uint32_t Platform::Watchdog::wdtGetTimeoutValue(uint32_t)' called in a constant expression before its definition is complete
 static constexpr const uint32_t mMsWdtTimeout = wdtGetTimeoutValue(mMsTaskInterval);

如何修复错误? THX!

1 个答案:

答案 0 :(得分:1)

1)不,在类定义完成之前,您不能使用constexpr的成员函数。

2)如果从constexpr成员函数调用方法,则被调用函数也必须是constexpr。在您的情况下,wdt_get_timeout_value也必须是constexpr。

也许您可以定义一个基类,其中包含将使用constexpr从派生类调用的方法。

参见示例:

constexpr int ext( int i)
{
    return i+2;
}

class Base
{
    protected:
    static constexpr int f( int i) { return ext(i)*2; }
};

class A: public Base
{
    public:
    static constexpr int val = 9;
    static constexpr int var = f( val );
};

int main()
{
    std::cout << A::var << std::endl;
}