A class that has a static const signed int data member when passed to a function as a const int& parameter will cause the data member to be an undefined symbol. If the static const signed int data member is re-typed as const unsigned int the error goes away. I've verified this on g++ 3.4.6 and 4.1.2. The following code example illustrates the error.
#include <stdio.h> static const signed int GLOBAL_BUFF_SIZE=30; class myclass { public: static const int BUFF_SIZE = 20; // Causes linker error. //static const signed int BUFF_SIZE = 20; // Causes linker error. //static const unsigned int BUFF_SIZE = 20; // No linker error. static const int ANOTHER_BUFF_SIZE; int myArray[BUFF_SIZE]; /* Linker error. % g++ static2.cpp Undefined first referenced symbol in file myclass::BUFF_SIZE /var/tmp//cc2IHYwP.o ld: fatal: Symbol referencing errors. No output written to a.out collect2: ld returned 1 exit status % g++ --version g++ (GCC) 3.4.6 and g++ (GCC) 4.1.2 % ccppc --version ccppc (Wind River VxWorks G++ DWARF-EH 4.1-131) 4.1.2 */ }; // This solves the linker problem. // Not an option for me. I need to dimension an array with BUFF_SIZE. const int myclass::ANOTHER_BUFF_SIZE=20; // Function that takes a constant reference to an integer. // When a static const signed int is passed to this function // that was defined in a class, you get the linker error. // If that static const is declared unsigned int, you dont get the error. // When the reference is to a global static, there is no error. void funky(const int& in) { printf("What came into funky() was %d\n", in); } int main() { printf("%d\n", myclass::BUFF_SIZE); // This doesn't cause the error. funky(myclass::BUFF_SIZE); // This line causes the error. funky(myclass::ANOTHER_BUFF_SIZE); // This doesn't cause the error. funky(GLOBAL_BUFF_SIZE); // This doesn't cause the error. } -- Summary: Static const signed int class member causes undefined symbol. Product: gcc Version: 4.1.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rwitmer at xmission dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45082