错误:非法使用此类型作为表达式。 C ++

时间:2012-06-11 19:54:57

标签: c++ inheritance static

我在类Node中创建了一个静态成员函数,并希望用一些参数调用该函数。如何在主函数中调用该函数?

class Node;
typedef shared_ptr<Node> SharedNode;

class Node {
    Node* parent;
    vector< SharedNode > children;
    int value;

    //limiting construction
    Node(int a_value):value(a_value),parent(0){}
    Node(const Node &copy); //non-construction-copyable
    Node& operator=(const Node& copy); //non-copyable
public:
    static SharedNode create(int a_value){
        return SharedNode(new Node(a_value));
    }
    SharedNode addChild(SharedNode child){
        child->parent = this;
        children.push_back(child);    // First there is a typo here. (nodes.push_back     is incorrent)
        return child;
    }


int main(){

    SharedNode a1 = Node.create(1);
    SharedNode b1 = Node.create(11);
    SharedNode b2 = Node.create(12);
    SharedNode b3 = Node.create(13);
    SharedNode b21 = Node.create(221);
    a1.get()->addChild(b1);
    a1.get()->addChild(b2);
    a1.get()->addChild(b3);
    b2.get()->addChild(b21);
    b2.get()->getNode(221);


    int hold;
    cin>>hold;
}

它给了我一个错误:非法使用此类型作为表达式。 谢谢你们!

3 个答案:

答案 0 :(得分:5)

使用:: operator而不是.访问静态,因此它应为Node::Create

答案 1 :(得分:1)

使用:

Node::create(1)

调用函数

答案 2 :(得分:1)

静态成员函数或静态数据成员只是整个类的一个副本,并且每个实例没有单独的副本。

因此,只能使用类名和::运算符访问静态成员。

.运算符仅与非静态成员或实例成员一起使用。