Question

/*
 * CDummy.h
 */
#ifndef CDUMMY_H_
#define CDUMMY_H_

class CDummy {

public:
    CDummy();
    virtual ~CDummy();
};

#endif /* CDUMMY_H_ */

I've read that one should not declare class variables in header files. ist this right? So I declare it in the cpp file below:

/*
 * CDummy.cpp
*/

#include "CDummy.h"

static int counter = 0; //so here is my static counter. is this now private or public? how can i make it public, i cannot introduce a public block here.

CDummy::CDummy() {
  counter++;

}

CDummy::~CDummy() {
    counter--;
}

using this code i cannot access the classvariable from my main program....

thx

Was it helpful?

Solution

A "class variable" needs to belong to a class. So it has to be declared in the class definition. If the class definition is in a header file, then it follows that the class variable declaration must also be in a header file.

The class variable's definition should go in an implementation file, typically the one in which the class' members are defined. Here's a simplified example:

Foo.h

struct Foo
{
  void foo() const;
  static int FOO;   // declaration
};

Foo.cpp

void Foo::foo() {}
int Foo::FOO = 42; // definition

What you have here:

static int counter = 0;

is a static variable that is not a static member of any class. It is only non-member static variable, static to the compilation unit of CDummy.cpp.

OTHER TIPS

static int counter = 0; //so here is my static counter. is this now private or public? how can i make it public, i cannot introduce a public block here.

From the code I see counter is just a global static variables as it is not declated anywhere in your CDummy

Static variables should be public so that you could initialize them outside the class declaration. Your code should look like this to have it public:

class CDummy {
public:
   static int count;
   CDummy();
   virtual ~CDummy();
};
// inside CDummy.cpp
int CDummy::count = 0;

Here you can read more about how to use static variables in class declaration.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top