Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在命名空间中正确调用此函数?c++;_C++ - Fatal编程技术网

C++ 如何在命名空间中正确调用此函数?c++;

C++ 如何在命名空间中正确调用此函数?c++;,c++,C++,我的代码: #include <iostream> using std::cout; namespace ProgramCall { class Class1 { public: int Sum(int A, int B) { return A + B; } public: float Sum(int A, float B) { return A + B; } }; class Cla

我的代码:

#include <iostream>
using std::cout;

namespace ProgramCall
{

  class Class1
  {
    public: int Sum(int A, int B)
    {
      return A + B;
    }

    public: float Sum(int A, float B)
    {
        return A + B;
    }
  };

  class Class2 : Class1
  {
    public:
      int Sum(int A, int B, int C)
      {
        return A + B + C;
      }
  };

}
int main() {
  int res = ProgramCall::Class1.Sum(1,2);
  cout << res;
}

我怎样才能解决这个问题?我的意思是,我应该如何在名称空间中的类中调用这些函数?我是c++的初学者(但对c很在行),任何提示都很感激

ProgramCall::Class1
是一种类型,而不是对象。因此,
ProgramCall::Class1.Sum(…)
是不正确的

您可以创建一个临时对象并对其调用
Sum

int res = ProgramCall::Class1().Sum(1,2);
//                           ^^^ constructs an object

另一方面

使用

class Class2 : Class1 
这也许是一个错误。这样做时,
Class1
Class2
private
基类。您将无法使用:

int res = ProgramCall::Class2().Sum(1,2);
如果这就是目的,请保持代码原样。如果您希望能够使用上述行,请将
Class2
更改为:

class Class2 : public Class1 
{
    ...
}

首先,您不能将成员函数作为
ClassName::method()
调用,只要它不是静态的,非静态方法就绑定到类的实例,因此首先实例化它应该可以:

auto instance = ProgramCall::Class1();

int res = instance.Sum(1,2);

第二,对于您显示的问题,我建议您将内容保留在自由函数中。求和方法不需要状态,也不存在
Class1
Class2
需要维护的不变性。虽然我不知道你是否打算以后丰富这些类。

Class1
必须实例化,或者它的函数
Sum()
标记为
static
,然后你可以用
ProgramCall::Class1::Sum(…)
调用它。你可能对这个问题感兴趣。这两个注释都很有用。泰!旁注:您不必用访问说明符标记每个成员。实际上,此代码仅用于语法研究,所以我正在测试不同的可能性。非常感谢。实际上,这段代码只是为了语法研究,所以我正在测试不同的可能性。
auto instance = ProgramCall::Class1();

int res = instance.Sum(1,2);