C++ declaring a static object in a class

ThunderStruct picture ThunderStruct · Apr 10, 2015 · Viewed 19.8k times · Source

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(){ x = 4; }
    int getX() { return x; }
};

class B
{
    static A obj1;  // <- Problem happens here
public:
    static void start();
};

int main()
{
    B::start();
}

void B::start()
{
    int x = obj1.getX();
}

What I want to achieve is to get int x in B::start() to equal int x in class A (4).

I tried googling all this for the past hour and all I understood was that C++ doesn't allow static objects' declarations. Is that correct?

If so, here's my question. How can I get the same result? What are my available workarounds? Keeping in mind that the rest of my code depends on the functions in class B to be static.

Error

error LNK2001: unresolved external symbol "private: static class A B::obj1"

Thanks!

Answer

thinkerou picture thinkerou · Apr 10, 2015

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();
}