是什么导致错误 #18 在 MSP430 上预期为“)”

What causes the error #18 expected a ")" on a MSP430

使用 TI Code Composer 为 MSP430 编译以下 C++14 代码时出现以下错误:

subdir_rules.mk:14: recipe for target 'main.obj' failed
"Interface.h", line 75: error #18: expected a ")"
"Derived.h", line 91: error #18: expected a ")"

这是针对以下代码结构,其中 Interface.h class 是一个可以为 STM32 目标编译的库。

#include <cstdint>

namespace NS
{
  class Interface 
  {
    public:
      // Other pure virtual functions such as:
      virtual void advance() = 0;

      // This is the problem function
      virtual void advance(const uint32_t N) = 0;
  };
}

接下来在MSP430项目中接口在多个对象中使用。这是多个实现的一个示例,它们都给出相同的错误。

#include "Interface.h"

class Derived : public ::NS::Interface
{
  public:
    // Overriding virtual functions with implementations in cpp file.
    void advance() override;

    // The problematic function
    void advance(const uint32_t N) override;

  private:
    uint32_t index;
};

cpp 文件:

#include "Derived.h"

Derived::advance() 
{
  ++index;
}

Derived::advance(const uint32_t N)
{
  index += N;
}

现在检查任何“有趣”字符(如希腊问号)的代码都没有产生任何结果。我尝试替换文本,再次输入等等,但没有结果

注释掉函数 advance(const uint32_t N) 可以解决问题,因此它不是文件中的其他内容。

什么可能导致这个问题?

问题确实如@Clifford所述。 N 已在 MSP430 代码中的某处定义。将 Derived::advance(const uint32_t N) 重命名为 Derived::advance(const uint32_t N_bytes) 即可解决问题。