在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但更繁琐的方法,并且只是尝试(为了好玩)使用宏/模板的不同方法。
任何想法或想法?具体就上述问题而言,还要注册函数/类。
提前感谢您的时间;)
答案 0 :(得分:11)
您不能在类中拥有成员函数的多个声明。您的代码违反了C ++标准中的9.3/2
成员函数定义除外 出现在类定义之外,并且除了类的成员函数的显式特化之外 模板和成员函数模板(14.7)出现在类定义之外,成员函数不得重新声明。
答案 1 :(得分:5)
无需转发声明成员函数。无论如何,它们在全班都可见。
答案 2 :(得分:2)
正如Mark B所说,声明自由函数和声明成员函数的方式不同。
自由函数声明可以分散在各处,并且要求程序中只存在一个匹配声明是有限的。
但是,您只能在一个很大的类定义 1 中定义一个类,因此它的所有成员声明都可以在一个地方找到。他们不能分散你的计划;因此,标准没有理由允许您编写多个成员声明...所以它不会:
成员函数定义除外 出现在课堂之外 定义,除了显式 成员职能的专业化 类模板和成员函数 模板(14.7)出现在 类定义,成员 功能不得重新申报。 [9.3 / 2]