Question

I have a class with a static char array. The size of the array is given to me in argv.

I want to do somthing like this:

class ABC {

public:
  static char *buffer;
  ABC(int size) {
    ABC::buffer = new char[size];
  }

}

// in other file:

ABC tempVar(atoi(argv[1]));

but this doesn't seem to work. I get errors like:

Error 2 error LNK2001: unresolved external symbol "public: static char * ABC::buffer" (?buffer@ABC@@2PADA) gpslib.lib

How can I fix this?

Was it helpful?

Solution

You need to define the static buffer exactly once, it has only been declared. Add the following to exactly one .cpp file:

char* ABC::buffer;

Note that everytime an instance of ABC is created, the previously allocated buffer will be lost (a memory leak) which is not what you want.

A more robust solution would have buffer as an instance (non-static) member. An even more robust solution would use std::string instead of a char* and have dynamic memory allocation managed for you.

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