错误:“;”之前的预期构造函数、析构函数或类型转换令牌

Posted

技术标签:

【中文标题】错误:“;”之前的预期构造函数、析构函数或类型转换令牌【英文标题】: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,我发现只有静态函数的类有点异味。一些讨论here 和here。 @YSC 我想知道,他试图用这行来实现什么,而不是编译器输出是什么。和霍基问的一样 我删除了不必要的代码并将其分解为最必要的内容。 【参考方案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】:

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

【讨论】:

评论不用于扩展讨论;这个对话是moved to chat。

以上是关于错误:“;”之前的预期构造函数、析构函数或类型转换令牌的主要内容,如果未能解决你的问题,请参考以下文章

错误:“;”之前的预期构造函数、析构函数或类型转换令牌

错误:“(”标记之前的预期构造函数、析构函数或类型转换?

错误:“。”之前的预期构造函数、析构函数或类型转换令牌 - 了解 fstream

错误:预期的构造函数、析构函数、“<”标记之前的类型转换

OpenCV 预期的构造函数、析构函数或类型转换

Xcode: 错误:对于函数式的转换或类型构造,预期'('。