关于网友提出的“GCC, 自己的函数和include的函数重名导致的no matching function for call”问题疑问,本网通过在网上对“GCC, 自己的函数和include的函数重名导致的no matching function for call”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:GCC, 自己的函数和include的函数重名导致的no matching function for call
描述:include的文件没有namespace, 自己声明的函数名和include里的重了, 虽然参数不同但依然会提示"error: no matching function for call to XXX", 不改名的话有什么方法能显示的指出调用的函数属于哪一个文件吗?
尝试了namespace XXX {#include }
强行添加namespace, 但编译会提示namespace里不存在要调用的函数
解决方案1:发现成员函数和非成员函数之间不能发生重载关系, 是我想多了 (...)
想到个蠢办法是建个中间文件再包一次强行重命名...
warp.hpp:
#include
inline void wrap_XXX(){XXX();}
#include "wrap.hpp"
class Foo {
public:
void XXX() {}
void bar() {wrap_XXX();}
};
解决方案2:用笨办法吧...重命名,学oc 加上前缀!
解决方案3:应该不能实现吧,除非在链接的时候动手脚。话说c++的重载机制应该能识别出正确的函数调用啊,如果排除参数不匹配的原因,是不是因为模板参数不匹配,如果那样的话弄个偏特化就好了
解决方案4:如果要include的头文件可以自行控制修改,那可以在那个文件里加上命名空间;
如果引用的是第三方文件,可使用适配器模式,重新定义接口;
适配器模式详见:
http://design-patterns.readthedocs.org/zh_CN/latest/structural_pattern...
以上介绍了“GCC, 自己的函数和include的函数重名导致的no matching function for call”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1537329.html