错误:在'。'标记之前预期的unqualified-id

时间:2012-05-03 11:09:59

标签: c++ compiler-errors

class A
{
    private:
        A () {}

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

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

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

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

5 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

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

A::getInstance();

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

使用范围解析运算符 ::

e.g。

class::methodName()