Kurospidey
Kurospidey

Reputation: 423

Class declaration in a header file and static variables

Noob question, but would like to understand the following:

Imagine I have a multifile project. I'm specifying a class in a header file to be shared among all the files in the project, and I write this : static int test = 0; and in the next line this: static const int MAX = 4;

The first one would be an error trying to compile because of the one definition rule. But the second one will compile without errors. Why?

From what I understand, both have the same properties: whole execution storage duration, class scope and no linkage.

Any help?

EDIT: testing an external constant declaration in a header: extern const int MAX = 4; to force external linkage produced the expected error. So I don't understand why with the variable it gives me the error and with the constant it doesn't.

Upvotes: 0

Views: 1646

Answers (2)

πάντα ῥεῖ
πάντα ῥεῖ

Reputation: 1

Try

static const int test = 0;

I've sometimes noticed compiler errors with the immediate initialization of static const variables in the header file. You can always use the declaration in the header

class MyClass
{
    // ...
    static const int test;
    // ...
}

and initialize it in the corresponding .cpp file

const int MyClass::test = 0;

This should work properly with any other types than int as well.

Upvotes: 2

Qnan
Qnan

Reputation: 3744

Integer constants in C++ don't actually occupy any space in the object and don't act like variables in general. Think about them more like numbers that are given names in this particular context.

Upvotes: 1

Related Questions