【问题标题】:error: expected constructor, destructor, or type conversion before ';' token错误:“;”之前的预期构造函数、析构函数或类型转换令牌
【发布时间】:2020-01-22 15:55:48
【问题描述】:

简单地问:这里出了什么问题?!

class c {
  public:
  static void v() {
    int var = 0;
  }

  static int i() {
    return 1;
  }
};

c::i(); // Throws error message
c::v(); // Also throws error message

void setup() {
}

void loop() {
}

错误信息是:

正在编译草图...

/tmp/698769749/CompilingTests/CompilingTests.ino:12:7:错误:预期 ';' 之前的构造函数、析构函数或类型转换令牌

c::i();

^

/tmp/698769749/CompilingTests/CompilingTests.ino:13:7:错误:预期 ';' 之前的构造函数、析构函数或类型转换令牌

c::v();

^

退出状态 1

这个错误信息应该告诉我什么?

【问题讨论】:

  • 你想用c::i(); 和下一行做什么?
  • c::i(); // Throws error message c::v(); // Also throws error message 这到底是什么意思?
  • FWIW,我发现只有静态函数的类有点异味。一些讨论herehere
  • @YSC 我想知道,他试图用这行来实现什么,而不是编译器输出是什么。和霍基问的一样
  • 我删除了不必要的代码并将其分解为最必要的内容。

标签: c++ compiler-errors


【解决方案1】:

声明 c::i()c::v() 不允许在全局范围内,它们应该包含在函数中。此外,这些静态成员函数应声明为public,以便在c 之外访问:

struct c {

  static void v() {
    int var = 0;
  }

  static int i() {
    return 1;
  }
};

void g()
{
    c::i();
    c::v();
}

void setup() {
}

void loop() {
}

演示:https://godbolt.org/z/whiDHh

【讨论】:

  • 我刚刚看到publicproblem 并在我的帖子中修复了这个问题。我“忘记”将语句放入setup()(很明显我对 C++ 很陌生......)。我只是不明白错误信息。谢谢!
  • @alve89 理解 C++ 诊断本身就是一项艰巨的技能。
【解决方案2】:

突出的问题之一是您的函数没有公共访问权限。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2016-03-14
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多