static const - undefined reference

static const - undefined reference
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:prawie 20 lat
  • Ostatnio:14 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;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
rincewind
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
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.