Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

When using a function that requires use of the subclass, I have an error that said subclass hasn't been declared. So how would I declare this subclass without having an issue of redeclaration later?

This is a general idea of what the code would look like:

class MyClass {
public:
    void myFunction(Node* myNode);
private:
    class Node {
        public:
            Node();
            Node(string myString, int myInt);
            ~Node();
            string m_string;
    private:
        int m_int;
    }
};

So in this case, how would I declare Node so that it could be used in myFunction without redeclaring it later?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
146 views
Welcome To Ask or Share your Answers For Others

1 Answer

So how would I declare this subclass[nested class] without having an issue of redeclaration later?

By declaring (and defining) the nested class before declaring a member function with an argument that depends on the nested class declaration.

class MyClass {
private:
    class Node {
        public:
            Node();
            Node(string myString, int myInt);
            ~Node();
            string m_string;
    private:
        int m_int;
    }
public:
    void myFunction(Node* myNode);
};

While a forward declaration would be sufficient to declare a function with a pointer argument, nested classes cannot be forward declared.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...