C++ declaring a static object in a class

后端 未结 2 381
终归单人心
终归单人心 2021-01-18 06:21

I\'m trying to declare a static object of a class A that I wrote in a different class B, like this:

class A // just an example
{
    int x;
public:
    A(){          


        
相关标签:
2条回答
  • 2021-01-18 06:42

    You should initialize static var, the code:

    class A // just an example
    {
        int x;
    public:
        A(){ x = 4; }
        int getX() { return x; }
    };
    
    class B
    {
        static A obj1;  // <- Problem happens here
    public:
        static void start();
    };
    
    A B::obj1; // init static var
    
    int main()
    {
        B::start();
    }
    
    void B::start()
    {
        int x = obj1.getX();
    }
    
    0 讨论(0)
  • 2021-01-18 06:47

    As thinkerou said, you need to include the declaration of the variable:

    A B::obj1;
    

    For normal, non-static member variables you don't need this step because the variables are declared behind the scenes as part of the constructor. These variables are then tied to the instance of the class you just constructed. But static variables are not tied to any instance of a class; they are shared by all instances of a class. So constructors can't properly deal with them.

    C++ gets around this by making you manually declare (and optionally initialize) any static member variables. Depending on where they are declared, they typically get constructed before your main() function starts, so they are available for use immediately.

    0 讨论(0)
提交回复
热议问题