Re: static const int problem
cathode26@gmail.com wrote in
news:e19651a4-3688-418d-9916-2381b2b5517b@googlegroups.com:
On Tuesday, May 15, 2007 6:17:01 AM UTC-5, mati wrote:
Hi
The following code works:
#include <vector>
class C {
private:
static const int m_static = 2;
public:
void f(const std::vector<int>& v)
{
int a = m_static;
std::vector<int> stripped(v.begin()+a, v.end());
//std::vector<int> s2(v.begin()+m_static,v.end());
}
};
int main()
{
C c;
std::vector<int> pv;
int i;
pv.push_back(i);
pv.push_back(i);
pv.push_back(i);
c.f(pv);
}
But when I erase the comment in the void f(...), then compiler gives
an error:
g++ -ansi -Wall -o test test.cpp
/tmp/cckLnGUY.o: In function `C::f(std::vector<int,
std::allocator<int>
> const&)':
test.cpp:(.text._ZN1C1fERKSt6vectorIiSaIiEE[C::f(std::vector<int,
std::allocator<int> > const&)]+0xdb): undefined reference to
`C::m_static' collect2: ld returned 1 exit status
make: *** [test] Error 1
g++ --version
g++ (GCC) 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)
Can anybody tell me what I'm doing wrong?
So I tried your code in Visual Studio and it works fine, but if you
use http://codepad.org/ your code does not compile. It is true, this
is a declaration and not a definition.
[...]
class C {
private:
static const int m_static = 2;
Yes, this is a declaration which will need a definition in some source
file somewhere. If there is no such definition, the linker may complain
or not, depending on the usage of this symbol and optimization levels,
and obviously depending on which compiler you use.
Unfortunately, at least some MSVC versions fail to compile the correct
code with the definition added, complaining about multiply defined
symbols. So to avoid all the hassle I would suggest just to use:
class C {
private:
enum constants {
m_static = 2
};
hth
Paavo