我有以下程式可以在我的機器上使用 GCC 7.5.0 成功編譯,但是當我在這里試用該程式時,該程式不起作用。
class Foo
{
friend void ::error() { }
};
int main()
{
return 0;
}
這里的錯誤說:
Compilation failed due to following error(s).
3 | friend void ::error() { }
| ^
我的問題是這里有什么問題,我該如何解決。
uj5u.com熱心網友回復:
問題是一個合格的朋友宣告不能是一個定義。在您的示例中,由于名稱error是合格的(因為它具有::),因此相應的朋友宣告不能是定義。
這似乎是 GCC 7.5.0 中的一個錯誤。例如,對于 gcc 7.5.0,該程式可以作業,但對于 gcc 8.4.0 及更高版本,它不起作用。
解決此問題的一種方法是洗掉函式的主體{ }并通過添加分號error使其成為宣告;,如下所示:
//forward declare function error()
void error();
class Foo
{
friend void ::error();//removed the body { } . This is now a declaration and not a definition
};
int main()
{
return 0;
}
//definition of function error
void error()
{
}
請注意,您也可以將函式定義放在類定義之前error(),如此處Foo所示。
解決此問題的另一種方法是洗掉::并制作error一個不合格的名稱,如此處所示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425957.html
