3
class A
{
    private:
        A () {}

    public:
        static A* getInstance ()
        {
            return new A ();
        }
};

int main ()
{
    A.getInstance ();
    return 0;
}

导致标题中所述的错误。我确实意识到,如果我在 A 类中创建一个变量并在那里实例化它并直接返回它,错误就会消失。

但是,在这里我想了解这个错误的含义是什么,为什么我不能这样使用它。

4

5 回答 5

12

您需要使用范围解析运算符调用该方法 - ::

 A::getInstance ();

另外,如果这是一个单例,那是一个非常糟糕的。每当您调用getInstance()时,您都会收到一个新对象,如果您忘记删除任何实例,您将遇到内存泄漏。

单例通常是这样实现的:

class A
{
    private:
        A () {}
        static A* instance;
    public:
        static A* getInstance ()
        {
            if ( !instance )
                instance = new A ();
            return instance;
        }
};

//implementation file
A* A::instance = NULL;
于 2012-05-03T11:10:46.483 回答
4

使用范围解析运算符::.例如,不像 Java 中的那样):

A::getInstance();
于 2012-05-03T11:11:11.550 回答
2

getInstance是类的静态函数A。调用类的静态函数的正确形式是<class_name>::<static_function_name>.

我们还可以通过创建类的对象并使用.运算符来调用静态函数: <class_object>.<static_function_name>

于 2012-05-03T11:23:53.107 回答
1

.您可以使用或调用静态成员函数::。但是,如果您使用类名,则需要使用后者和对象,然后使用前者。

于 2012-05-03T11:11:34.507 回答
1

使用范围解析运算符::

例如

class::methodName()
于 2012-05-03T11:12:46.377 回答