我试图用c ++编写一个类,我遇到了一个相当奇怪的问题:在一个与类同名的类中调用外部函数。这有点令人困惑,所以这是一个例子:
void A(char* D) {
printf(D);
}
class A
{
public:
A(int B);
void C();
};
A::A(int B) {
// something here
}
void A::C() {
A("Hello, World.");
}
编译器在倒数第二行抱怨它找不到函数A(char *),因为它在类中,并且构造函数与函数同名。我可以在外面写另一个函数,比如:
ousideA(char* D) {
A(D);
}
然后在A :: C中调用outsideA,但这似乎是解决问题的愚蠢方法。有人知道更合适的解决方法吗?
答案 0 :(得分:40)
::A("Hello, world.");
应该可以正常工作。基本上它是说“使用全局命名空间中找到的A
”
答案 1 :(得分:5)
使用scope resolution operator ::
访问全局范围中的名称:
void A::C() {
::A("Hello, world.");
}
答案 2 :(得分:3)
我建议您使用命名空间。将您的类放在与函数不同的命名空间中。
namespace my_namespace1
{
void A() {}
}
namespace my_namespace2
{
struct A {};
}
int main()
{
my_namespace1::A();
my_namespace2::A my_a;
}
当然,真正的问题是,为什么你有一个类和一个具有不同名称的函数?一个很好的简单规则是创建名为WithABeginningCapitalLetter的类和函数withoutOne。那你永远不会有这个问题。当然,STL不会这样做......