static const - undefined reference

static const - undefined reference
  • Rejestracja: dni
  • Ostatnio: dni
0

Czy ktoś mi może powiedzieć czemu tak się dzieje?

A.h:

Kopiuj
#ifndef aaaa
#define aaaa

struct A
{
    static const int a = 5 ;
};

#endif

main.cpp:
</code=cpp>
#include "A.h"
#include <iostream>

int f(const int *i)
{
int b = 2**i;
return b-3;
}

int main()
{
std::cout<<f(&A::a)<<"\n";
return 0;
}

Kopiuj

$ g++ main.cpp -g -o p
/tmp/ccKYeC7l.o: In function main': ./main.cpp:12: undefined reference to A::a'
collect2: ld returned 1 exit status

Kopiuj

Przeniesienie definicji A::a z headera do cppka oczywiście załatwia sprawę.
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Przecież nie masz definicji.

Kopiuj
struct A
  {
   static const int a; // to jest deklaracja
  };
int A::a=5; // to jest definicja

int main()
  {
   cout<<A::a<<endl;
   return 0;
  }
rincewind
  • Rejestracja: dni
  • Ostatnio: dni
0

static const typu POD może być zdefiniowany inline. Nie wiem jaki masz kompilator, ale na gcc 4.7.2 twój kod działa: http://ideone.com/AwVMdv

Bardziej prawdopodobne jest to, że twój header nie jest w ogóle includowany – może znajduje się w innym miejscu albo pomyliłeś nazwę?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.