函数重载的最大数量? C++中是否有最多可重载的函数?

函数重载的最大数量? C++中是否有最多可重载的函数?,c++,function,C++,Function,我遇到了令人困惑的“无匹配函数”错误。我有一个重载的encode函数,对于我正在编码的每个结构/值类型(包括数组/向量的模板),有大约900个不同的版本。encode函数根据需要编码的字段相互调用 如果我将encode(std::string)函数放在文件(.h&.cpp)的底部,对它的调用将返回“无匹配函数”。如果它接近顶部,那么它们就不会 发生了什么,更重要的是,我应该如何修复它? (linux gcc版本4.6.1)根据您对错误出现和消失的描述,这与重载的数量无关。相反,问题是您试图在重载

我遇到了令人困惑的“无匹配函数”错误。我有一个重载的
encode
函数,对于我正在编码的每个结构/值类型(包括数组/向量的模板),有大约900个不同的版本。encode函数根据需要编码的字段相互调用

如果我将
encode(std::string)
函数放在文件(.h&.cpp)的底部,对它的调用将返回“无匹配函数”。如果它接近顶部,那么它们就不会

发生了什么,更重要的是,我应该如何修复它?


(linux gcc版本4.6.1)

根据您对错误出现和消失的描述,这与重载的数量无关。相反,问题是您试图在重载声明之前调用它

当您有一组函数,它们都像您描述的那样相互调用(无论它们是重载还是具有不同的名称),通常需要首先声明所有函数,然后在看到所有定义之后定义它们。通常,您可以对其进行结构化,使声明都位于头文件(其他文件也包括它)中,而定义都位于源文件(包括头文件)中,因此所有这些都很容易工作。如果有内联函数(通常需要在头文件中定义内联函数才能在所有编译单元中内联),事情会变得更复杂,但总体模式是相同的——首先声明所有内容,然后定义所有内容

编辑


“无匹配重载”错误的确切位置是哪里?--您需要在encode函数声明之后移动包含获取该错误的调用的定义(或者在包含该错误的定义之前移动encode声明)。只要所有声明都在所有定义之前,排序就可以了。

您有900个重载?????我将首先对重载进行适当的分组,通常大多数编译器都支持版本选项。。。阅读你的编译器手册。为什么你认为900个重载是很多的?那么
stream operator@Nim的重载呢?嗯,这是一个插件,我正在为主程序编译
make install
。这将链接主程序中的所有库,以便我可以在编码插件中引用它们。我认为它使用的是gcc,即4.6版。1@Lol4t0当前位置我不确定
运算符有多少重载这正好符合Raymond Chen的话“如果你不得不问,你可能做错了”。我会把责任放在实际有1025个重载上。我已经把我所有的函数声明和模板放在一个头文件中,把函数定义放在一个源文件中,所以我认为这不适用于我的情况。当我说“文件底部的函数”时,我指的是将声明移到头的底部,将定义移到源的底部。你说得对!我一直在考虑模板不需要单独的定义,因为它们在头文件中。我在页眉顶部给出了我所有的模板定义,并将它们的定义移到了底部,一切正常