【问题标题】:porting g++ code to Clang++ issue将 g++ 代码移植到 Clang++ 问题
【发布时间】:2014-08-27 21:50:39
【问题描述】:

以下代码是假设代码。这是 g++ (4.2.1) 下完全有效的代码。当使用 Clang++ (4.2) 编译时,它会产生错误qualified reference to 'myclass' is a constructor name rather than a type wherever a constructor can be declared

class myclass
{
public:
    myclass() { }
    ~myclass() {}

};

myclass::myclass* funct() {
    return new myclass();
}

我可以通过将 myclass::myclass* 更改为 myclass* 来解决此问题。但是,我预计不会更改任何代码。有没有我可以提供的命令行标志,以便像使用 Clang++ 一样编译此代码?

【问题讨论】:

  • 代码不符合标准,所以我很惊讶它在 g++ st all 上编译。我会改变它。
  • myclass 是一种类型。 myclass::myclass 不是。
  • g++ 4.2.1是什么,7岁了?

标签: c++ g++ clang++ llvm-clang


【解决方案1】:

不,没有这样的标志:因为这个程序格式错误,它不应该编译。

如果编译器编译它,那么它就是一个编译器错误。 This bug report 看起来像是影响您的特定 gcc 版本的那个。

代码应固定为:

myclass* funct() {
    return new myclass();
} 

【讨论】:

  • 另外,class myclass::myclass* funct() 也是合法的,但我看不出有人愿意这样做的任何理由。
  • @T.C 呵呵是的。将其添加到答案只会使读者感到困惑,我相信...尽管可以随意编辑。
  • 相关的 GCC 错误是11764。此外,从技术上讲,class myclass::myclass::myclass::myclass::myclass::myclass * 也是合法的:D
  • @T.C 报告添加感谢分享(你怎么这么快就找到了?)
  • 当我在已关闭的 bug 中搜索“注入的类名”时,发现的 bug 屈指可数。
【解决方案2】:

gcc 4.9.1 也拒绝代码:

 error: ‘myclass::myclass’ names the constructor, not the type

除非代码库对相当旧的 gcc 4.2 感到满意,否则我认为除了修复代码之外别无选择。

【讨论】:

    最近更新 更多