当前位置:  开发笔记 > 编程语言 > 正文

如何在使用c头时解决名称冲突?

如何解决《如何在使用c头时解决名称冲突?》经验,为你挑选了1个好方法。

我目前正在使用C/C++进行一些套接字编程.为了能够使用更简洁的界面和更多的OO结构,我决定围绕C套接字API的部分编写一些简单的包装类,但在这样做时我偶然发现了一个问题:

给出以下代码:

// Global method
int foo(int x)
{
    return x;
}

// Class that calls the global method
class FooBar
{
public:
    void foo() { return; };
    void baz() { foo(1); }
};

g ++给出以下错误消息:

test.cpp: In member function ‘void FooBar::baz()’:
test.cpp:10: error: no matching function for call to ‘FooBar::foo(int)’
test.cpp:9: note: candidates are: void FooBar::foo()

重命名类方法可以解决问题.

为什么即使方法签名不同,也存在某种命名冲突?解决这个问题的最佳方法是什么?

谢谢/ Erik



1> Johannes Sch..:

问题是它首先查看你的类的范围,并找到一个foo函数.然后查找将停止,编译器尝试匹配参数.由于它只在您的类中具有该范围内的一个foo函数,因此调用该函数失败.

您需要明确声明要调用自由函数:

::foo(1);

另一个解决方案是在baz中声明函数:

void baz() { int foo(int); foo(1); }

假定定义foo函数的范围是类的周围命名空间.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有