2014-08-27 137 views
1

以下代碼是一個假設代碼。這是g ++(4.2.1)下的完全有效的代碼。當與編譯鏘++(4.2)它通過改變myclass::myclass*myclass*產生誤差作爲qualified reference to 'myclass' is a constructor name rather than a type wherever a constructor can be declared將g ++代碼移植到Clang ++問題

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

}; 

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

我可以解決此問題。不過,我不希望更改任何代碼。是否有任何我可以提供的命令行標誌,以便像使用Clang ++一樣編譯此代碼?

+3

代碼不符合標準的方式是讓我很驚訝,它編譯於G ++ st所有。我會改變它。 – programmerjake 2014-08-27 21:54:02

+1

'myclass'是一種類型。 'myclass :: myclass'不是。 – 2014-08-27 21:55:12

+0

g ++ 4.2.1是什麼,7歲? – 2014-08-27 22:12:02

回答

4

不,沒有這樣的標誌:因爲這個程序是不合格的,它不應該編譯。

如果編譯器編譯它,那麼這是一個編譯器錯誤。 This bug report看起來像是影響你特定gcc版本的那個。

的代碼應該固定:

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

或者,'class myclass :: myclass * funct()'也是合法的,儘管我看不到有人會想要這樣做的任何理由。 – 2014-08-27 22:13:01

+0

@ T.C hehe是的權利。將它添加到答案只會讓讀者感到困惑,我相信......儘管如此,仍然可以自由編輯。 – quantdev 2014-08-27 22:14:04

+1

相關的GCC錯誤是[11764](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11764)。另外,在技術上'class myclass :: myclass :: myclass :: myclass :: myclass :: myclass *'也是合法的:D – 2014-08-27 22:23:44

3

GCC 4.9.1還拒絕代碼:

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

除非代碼庫是高興的,而舊的gcc 4.2,我看不出有任何的替代,而不是固定的代碼。