在C ++中为友元函数定义默认参数的正确方法

时间:2014-04-28 06:26:41

标签: c++ c++11 xcode5

我想为友元函数指定默认值,如下所示:

friend Matrix rot90 (const Matrix& a, int k = 1);

使用Xcode 5.1.1编译此行时,出现以下错误

./Matrix.hh:156:19: error: friend declaration specifying a default argument must be a definition

修复它的正确方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:8)

标准说(§8.3.6):

  

如果朋友声明指定了默认参数表达式,那么   声明应是一个定义,并且是唯一的声明   翻译单元中的功能或功能模板。

也就是说,如果在friend声明中指定默认参数,则还必须在此处定义该函数。如果您不想这样做,请删除那里的默认参数,并为指定默认参数的函数添加单独的声明。

// forward declarations:
class Matrix;
Matrix rot90 (const Matrix& a, int k = 1);

class Matrix {
    friend Matrix rot90 (const Matrix&, int); //no default values here
};