static const - undefined reference

0

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

A.h:

#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;
}


$ 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


Przeniesienie definicji A::a z headera do cppka oczywiście załatwia sprawę.
0

Przecież nie masz definicji.

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

int main()
  {
   cout<<A::a<<endl;
   return 0;
  }
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ę?

1 użytkowników online, w tym zalogowanych: 0, gości: 1