多个成员函数转发声明

时间:2011-05-12 15:24:08

标签: c++

在C ++中,我可以有多个函数的前向声明,如:

void Func (int);
void Func (int);   // another forward declaration, compiles fine
void Func (int) {} // function definition, compiles fine

然而VC ++ 2010在我为成员函数做同样的事情时抱怨(无论我是否包含定义):

class Test {
   void Func (int);
   void Func (int);   // error C2535 here
   void Func (int) {} // error here too
   };

我在网上找不到任何关于多个成员函数转发声明的内容,无论是合法的,非法的,VC ++特定的等等......有没有办法解决这个问题?这是非法的吗?

现在我为什么要这样做?没有特别的项目,只是用不同的方式来注册功能。在其他项目中,我必须注册函数/类并使用较少的hack-ish但更繁琐的方法,并且只是尝试(为了好玩)使用宏/模板的不同方法。

任何想法或想法?具体就上述问题而言,还要注册函数/类。

提前感谢您的时间;)

3 个答案:

答案 0 :(得分:11)

您不能在类中拥有成员函数的多个声明。您的代码违反了C ++标准中的9.3/2

  

成员函数定义除外     出现在类定义之外,并且除了类的成员函数的显式特化之外     模板和成员函数模板(14.7)出现在类定义之外,成员函数不得重新声明。

答案 1 :(得分:5)

无需转发声明成员函数。无论如何,它们在全班都可见。

答案 2 :(得分:2)

正如Mark B所说,声明自由函数和声明成员函数的方式不同。

自由函数声明可以分散在各处,并且要求程序中只存在一个匹配声明是有限的。

但是,您只能在一个很大的类定义 1 中定义一个类,因此它的所有成员声明都可以在一个地方找到。他们不能分散你的计划;因此,标准没有理由允许您编写多个成员声明...所以它不会:

  

成员函数定义除外   出现在课堂之外   定义,除了显式   成员职能的专业化   类模板和成员函数   模板(14.7)出现在   类定义,成员   功能不得重新申报。 [9.3 / 2]


  1. 当然,您可以在程序中多次包含该类定义,但必须完全匹配,因此,为了本讨论的目的,它可能只是一个单一的定义。