【问题标题】:error C2059: syntax error c++ code on `= delete` in vs10错误 C2059:vs10 中 `= delete` 上的语法错误 C++ 代码
【发布时间】:2013-11-03 21:50:11
【问题描述】:

我对这段代码有疑问:

// Make it Non Copyable 


FileLogger (const FileLogger &) = delete;
FileLogger &operator= (const FileLogger &) = delete;

我需要解决这个错误:

Error   1   error C2059: syntax error : ';' 
Error   2   error C2238: unexpected token(s) preceding ';'  

此错误在上面发布的同一代码行中以相同的语法发生了 16 次。

【问题讨论】:

  • 您使用的是哪个版本的 Visual C++ 编译器?
  • 您到底希望做什么?这个合成器在很多方面似乎都是错误的,我什至没有......
  • 我根本不懂那种语法。你想做什么? FileLogger 是一个函数,如果是,你如何将它分配给“删除”?发布更多信息,也许我可以提供帮助。
  • @Havenard 这应该是C++11 中的有效语法。
  • @greatwolf 真的吗?这些到底是什么意思?

标签: c++ visual-studio-2010 visual-c++ c++11 compiler-errors


【解决方案1】:

我假设您正在尝试使用 new C++11 = delete syntax 来禁止默认实现。我认为这个错误意味着这个编译器只是不理解那个语法。

在 C++11 之前的编译器中,典型的方法是改用 DISALLOW_COPY_AND_ASSIGN macros,最终将构造函数/赋值声明为私有。

【讨论】:

  • plz,你能告诉我更多如何在我的课堂上使用 DISALLOW_COPY_AND_ASSIGN 宏吗?
  • 如果你只是删除这些行,代码应该编译得很好。此代码告诉编译器它必须禁止复制类的尝试,从而引发编译时错误。如果您删除代码,它将允许复制,但视情况而定,这应该不是问题。
  • @SecurityCrazy How to disable the copy constructor 并为 operator= 做同样的事情。
【解决方案2】:

在 C++11 之前的版本中,delete is a reserved word。这意味着它对编译器具有特殊意义,不能用于其他任何事情。如果这是您的变量之一的名称,请重命名它,您应该没问题。

【讨论】:

  • 这实际上是合法的——他试图实现的是 C++11 的一部分。
  • 我故意将这个答案留在这里(并在社区维基化它)以避免给未来的访问者造成混淆,但@poolie 是正确的。
  • 我当前的c++版本有什么办法吗
  • @SecurityCrazy:这种 C++11 语法仅在 VS2013 中可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多