函数重载的最大数量

Maximum number of function overloads?

本文关键字:最大数 重载 函数      更新时间:2023-10-16

在C++中,是否存在可以相互重载的最大函数数?

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

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

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

(linux gcc 4.6.1版)

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

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

编辑

"无匹配重载"错误究竟是从哪里来的?——您需要将包含获取该错误的调用的DEFINITION移到encode函数的DECLARATION之后(或将encode DECLARATION移到带错误的DEFINITING之前)。只要所有声明都在所有定义之前,订单就可以了。