【问题标题】:C++ - Calling a function inside a class with the same name as the classC++ - 在类中调用与类同名的函数
【发布时间】:2010-11-06 21:23:44
【问题描述】:

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

【问题讨论】:

    标签: c++ class constructor


    【解决方案1】:
    ::A("Hello, world.");
    

    应该可以正常工作。基本上是说“使用在全局命名空间中找到的A

    【讨论】:

      【解决方案2】:

      我建议您使用命名空间。将您的类放在与函数不同的命名空间中。

      namespace my_namespace1
      {
      
      void A() {}
      
      }
      
      namespace my_namespace2
      {
      
      struct A {};
      
      }
      
      
      int main()
      {
          my_namespace1::A();
          my_namespace2::A my_a;    
      }
      

      当然,真正的问题是,为什么你有一个不同名称的类和函数?一个很好的简单规则是创建名为 WithABeginningCapitalLetter 的类和没有 One 的函数。那么你永远不会有这个问题。当然,STL 不这样做...

      【讨论】:

        【解决方案3】:

        使用scope resolution operator :: 从全局范围访问名称:

        void A::C() {
          ::A("Hello, world.");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-12
          • 2020-09-25
          • 2012-11-12
          • 2012-01-05
          • 1970-01-01
          • 1970-01-01
          • 2014-07-17
          • 1970-01-01
          相关资源
          最近更新 更多