C ++ - 在类中调用与类同名的函数

时间:2009-06-30 03:43:06

标签: c++ class constructor

我试图用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,但这似乎是解决问题的愚蠢方法。有人知道更合适的解决方法吗?

3 个答案:

答案 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不会这样做......