在C ++中是否存在可以相互重载的最大数量的函数?
我正在困惑“没有匹配的功能”错误。我有一个重载encode
函数,我正在编码的每个结构/值类型有大约900个不同的版本(包括数组/向量的模板)。编码函数根据需要编码的字段相互调用。
如果我将encode(std::string)
函数放在文件的底部(.h& .cpp),则对它的调用将返回“无匹配函数”。如果它接近顶部那么他们就不会。
发生了什么,更重要的是,我该如何解决?
(linux gcc version 4.6.1)
答案 0 :(得分:3)
根据您放置函数的位置出现和消失的错误描述,这与重载次数无关。相反,问题在于你试图在声明之前调用重载。
如果你有一堆函数都像你描述的那样互相调用(无论它们是重载还是具有不同的名称),你通常需要首先DECLARE所有函数然后在所有定义之后定义它们。被人看见了。通常你构造这个,所以声明都在头文件中(所以其他文件包括它)和定义都在源文件(包括头文件)中,所以这一切都很容易。如果您有内联函数(通常需要在头文件中定义以在所有编译单元中内联),事情会变得更复杂,但总体模式是相同的 - 首先DECLARE所有内容,然后DEFINE所有内容。
修改强>
你究竟在哪里得到'无匹配过载'错误? - 您需要移动包含在编码函数声明之后获得该错误的调用的DEFINITION(或者在DEFINITION之前移动编码DECLARATION并显示错误)。只要所有声明都在所有定义之前,订购就可以了。