错误:“;”之前的预期构造函数、析构函数或类型转换令牌
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
【讨论】:
我刚刚看到public
problem 并在我的帖子中修复了这个问题。我“忘记”将语句放入setup()
(很明显我对 C++ 很陌生......)。我只是不明白错误信息。谢谢!
@alve89 理解 C++ 诊断本身就是一项艰巨的技能。【参考方案2】:
突出的问题之一是您的函数没有公共访问权限。
【讨论】:
评论不用于扩展讨论;这个对话是moved to chat。以上是关于错误:“;”之前的预期构造函数、析构函数或类型转换令牌的主要内容,如果未能解决你的问题,请参考以下文章