| re: unresolved external symbol linker error with a vector which is a static member variable
"Serge" <serge@NOSPAM.com> wrote in message
news:41c44669$0$13470$ba620e4c@news.skynet.be...[color=blue]
> Hi,
> I have no problem creating a static member variable with integers, etc but
> when I try the same with a vector then I always get linker errors that the
> static member variable is unknown (unresolved external symbol)
> Below is what an example of the code I use. Can somebody tell me what I am
> doing wrong ?
> Thanks very much in advance,
> Serge
>
> //myclass.h
> //header file
> #include <vector>
>
> using namespace std;
>
> class myclass
> {
> public:
> static void my_method (int new_value);
>
> private:
> static vector<int> m_variable_v; //static member variable[/color]
This is a declaration, not a definition. No actual object has
been created. And still no vector object will be created
if you create a type 'myclass' object, because 'static' means
that the member is not stored as part of a 'myclass' object,
but separately, only once. I.e. 'm_variable_v's scope is
your class, but it is not actually part of a 'myclass' object.
You need to provide (exactly one)
definition of your static vector.
[color=blue]
> };
>
>
>
> //myclass.cpp
> //cource code class
>
> #include "myclass.h"
>
> using namespace std;
>
> //define static member variables
> vector<int> m_variable_v;[/color]
Not quite right. This defines a vector which is *not*
in your class' scope. It has nothing to do with your
class or any objects of that type.
vector<int> myclass::m_variable_v;
[color=blue]
> void myclass::my_method(int new_value)[/color]
See how you've qualified 'my_method' as being a member
of 'myclass' here? Same is required for static data members.
[color=blue]
> {
> m_variable_v.push_back(new_value);
> }[/color]
-Mike |