如何在 C++ 中访问命名空间中的类成员函数

How to access class member function in a namespace in C++

提问人:Mykola Tetiuk 提问时间:2/22/2021 更新时间:2/22/2021 访问量:1286

问:

我有一个命名空间。该类位于命名空间中。

namespace SALES
{
    class Sales
    {
    ...

我已经创建了函数。

void SALES::Sales::set()
{
   ...

现在我正在创建一个对象SALES::Sales interactive ();

但我无法找到方法。 请指出我的错误。

interactive.set();不起作用

SALES::interactive.set();不起作用

interactive.SALES::set();不起作用

C++ 对象 OOP 命名空间

评论

3赞 Lukas-T 2/22/2021
SALES::Sales interactive ();被解析为函数声明。尝试或干脆 它被称为最令人烦恼的解析SALES::Sales interactive {};SALES::Sales interactive;
1赞 john 2/22/2021
现在很明显:与命名空间完全无关。将来请比“不起作用”更具描述性。SALES::Sales interactive;
2赞 john 2/22/2021
@13.tamil 完全无关紧要的评论,而且通常也是不好的建议。
1赞 Mykola Tetiuk 2/22/2021
成功了!谢谢大家!!现在看来,这似乎是一个错误的问题。我应该删除它吗?
1赞 D-RAJ 2/22/2021
@MykolaTetiuk 如果它对你有用,它有可能帮助其他人。因此,请考虑不要删除它。

答:

1赞 D-RAJ 2/22/2021 #1

访问函数的非静态成员的方法是使用对象运算符的成员。例如

class SomeObject {
public:
    SomeObject() {}

    void SayHello() { ... }
    
    int age = 10;
};

// When calling members.
SomeObject object;
object.SayHello();
int age = object.age;

在实例化时,改用 或。如果不是,当您尝试这样做时: ,C++ 将尝试将其解析为函数。现在就你而言,第一个; 需要工作。SALES::Sales interactive;SALES::Sales interactive{};SALES::Sales interactive ();interactive.set();

如果它仍然不起作用,它可能与成员的可访问性有关。默认情况下,类将其成员设为私有;只有友元类和它本身才能访问这些对象。因此,请确保成员是公开的。