Форум программистов, компьютерный форум CyberForum.ru

linker error - C++

Восстановить пароль Регистрация
 
borakula9
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 14
13.12.2012, 02:00     linker error #1
есть описание класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef bulka_h
#define bulka_h
 
using namespace std;
 
class bulka
{
      private:
              static int bulka::kol_bulok;
              void copy(const bulka &b)
              {
                   kol_bulok=b.kol_bulok;    
              }      
      public:
             bulka(){ kol_bulok=0;}
             static void gotovka(void){kol_bulok++;};
             bulka operator=(const bulka &b) 
             {
                   copy(b);
                   return *this;
             }
             int get_kol()
             {
                 return kol_bulok;
             }
      ~bulka(){kol_bulok=0;}
      
      
};
#endif
при компиляции выдает ошибки:
[Linker error] undefined reference to `bulka::kol_bulok'
[Linker error] undefined reference to `bulka::kol_bulok'
[Linker error] undefined reference to `bulka::kol_bulok'
[Linker error] undefined reference to `bulka::kol_bulok'
ld returned 1 exit status
помогите понять в чем проблема
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 02:00     linker error
Посмотрите здесь:

не Компилируется [Linker Error] C++
Непонятные ошибки(Linker Error) C++
ошибка [Linker Error] C++
Linker Error: undefined symbol C++
C++ Linker error msvcprtd.lib(msvcp100d.dll) error lnk2005 already defined libcpmtd.lib
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
13.12.2012, 02:16     linker error #2
Весь код нужен, у меня нормально всё скомпилилось
borakula9
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 14
13.12.2012, 03:05  [ТС]     linker error #3
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include<iostream>
#include"pekar.h"
#include"bulka.h"
#include"windows.h"
#include<conio.h>
#include <wininet.h>
 
using namespace std;
    int kol_pekarej;
    pekar *pekarr;
    bulka bulk;
 
 
 
void rrabota();
 
int main()
{
 
    cout<<"Vvedite kol. pekarej:\n";
    cin>>kol_pekarej;
    for(int i=0; i<kol_pekarej; i++)
    {
            int koll;
            cout<<"vvedite kol. pechej dlja pekarja "<<i<<"\n";
            cin>>koll;
            pekar ppek(koll, bulk);
            pekarr[i]=ppek;  
            system("cls");      
    }
    rrabota();
    system("pause");
    return 0;   
}
 
void rrabota()
{
     int kol=0, nr=0, gett=0;
     
     system("cls");
     cout<<"Vy mozhete:\n";
     cout<<"1.ispech bulochki\n";
     cout<<"2.uvelichit kol. pechej dlja pekarja";
     cout<<"3.Vyvesti obshhee kol. bulok\n";
     cout<<"4.Vyvesti kol. bulok dlja opred. pekarja\n";
     cout<<"5.uznat skolko pekar mozhet ispech bulok\n";
     cout<<"6.uznat skolko vse pekari mogut ispech bulok\n";
     cout<<"Dlja vybora dejstvija nazhmite sootvetstvujushhuju cifru\n";
     cout<<"Dlja vyhoda nazhmite ESC\n";  
     gett=getch(); 
     if(gett==27) exit(0);
     if(gett==49)
     {
           system("cls");
           cout<<"vvedite nomer pekarja\n";
           cin>>nr;
           cout<<"vvedite kol. bulochek\n";
           cin>>kol;
           pekarr[nr].rabota(kol);
           system("cls");
           rrabota();               
     }
     if(gett==50)
     {
           system("cls");
           cout<<"vvedite nomer pekarja\n";
           cin>>nr;
           cout<<"skolko pechej dobavit?\n";
           cin>>kol;               
           pekarr[nr].uvel_pechej(kol);
           system("cls");
           rrabota();
     }
     if(gett==51)
     {
           system("cls");
           cout<<"Ispecheno bulok:"<<bulk.get_kol()<<"\n";   
           rrabota();            
     }
     if(gett==52)
     {     system("cls");
           cout<<"vvedite nomer pekarja";
           cin>>nr;
           cout<<"pekarem "<<nr<<" ispecheno bulok: "<<pekarr[nr].get_kol_bulok()<<"\n";       
           rrabota();        
     }
     if(gett==53)
     {     system("cls");
           cout<<"vvedite nomer pekarja";
           cin>>nr;
           cout<<"pekar "<<nr<<" mozhet ispech bulok:"<<pekarr[nr].get_possible()<<"\n";
           rrabota();
     }
     if(gett==52)
     {     
           system("cls");
           kol=0;
           for(int i=0; i<kol_pekarej; i++)
                   kol+=pekarr[i].get_possible();
           cout<<"vsego mozhno ispech bulok:"<<kol<<"\n";
           rrabota();
     }
                   
     
}
bulka.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifndef bulka_h
#define bulka_h
#include <wininet.h>
 
using namespace std;
 
class bulka
{
      private:
              static int bulka::kol_bulok;
              void copy(const bulka &b)
              {
                   kol_bulok=b.kol_bulok;    
              }      
      public:
             bulka(){ kol_bulok=0;}
             static void gotovka(void){kol_bulok++;};
             bulka operator=(const bulka &b) 
             {
                   copy(b);
                   return *this;
             }
             int get_kol()
             {
                 return kol_bulok;
             }
      ~bulka(){kol_bulok=0;}
      
      
};
#endif
pekar.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#ifndef pekar_h
#define pekar_h
#include"pech.h"
#include"bulka.h"
 
using namespace std;
 
class pekar
{
      private:
              int kol_pechej, kol_bbulok, ind_pechi;
              pech *pechi;
              bulka bbulk;
              void copy(const pekar &p)
              {
                   kol_pechej=p.kol_pechej;
                   kol_bbulok=p.kol_bbulok;
                   ind_pechi=p.ind_pechi;
                   for(int i=0; i<kol_pechej; i++)
                           pechi[i]=p.pechi[i];     
                   ind_pechi=p.ind_pechi;                   
              }     
      public:
             pekar::pekar()
             {
                    kol_pechej=0;
                    kol_bbulok=0;
                    ind_pechi=0;       
             }
             pekar::pekar(int kol, bulka bbulk)
             {
                       pech pechh(100);
                      // pechh(100); */
                       kol_pechej=kol;
                       //pech *pechi=new pech [kol_pechej];
                       for(int i=0; i<kol_pechej; i++)
                               pechi[i]=pechh;//(100);//.pech(100);
                       kol_bbulok=0;
                       //*bulkk=*bbulk;
                       ind_pechi=0;
             }
      
             pekar operator=(const pekar &p)
             {
                   copy(p);
                   return *this;      
             }
      
             void rabota(int koll_bulok)
             {
                  for(int i=0; i<koll_bulok; i++)
                  {
                          if(pechi[ind_pechi].get_fuel()>0)
                          {
                                  pechi[ind_pechi].gotovka();
                                  bbulk.gotovka();
                                  kol_bbulok++;
                          }
                          else
                          {
                                  ind_pechi++;
                                  if(ind_pechi>=kol_pechej)
                                       {
                                               cout<<"Out of fuel!\n";
                                               break;
                                       }
                                  else
                                      {
                                               pechi[ind_pechi].gotovka();
                                               bbulk.gotovka();
                                               kol_bbulok++;       
                                      } 
                          }   
                  }  
             }
             
             int get_kol_bulok()
             {
                 return kol_bbulok;
             }
             
             void uvel_pechej(int kol)
             {
                  for(int j=kol_pechej; j<kol_pechej+kol; j++)
                          pechi[j]=pech(100);
                  kol_pechej+=kol;
             }
             
             int get_possible()
             {
                 int kol_possible=0;
                 for(int i=ind_pechi; i<kol_pechej; i++)
                 {
                         kol_possible+=pechi[i].get_fuel(); 
                 }    
                 return kol_possible;
             }
             
             ~pekar()
             {
                     delete[] pechi;
                     kol_pechej=0;
                     kol_bbulok=0;
                     ind_pechi=0;        
             }
             
};
#endif
pech.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
class pech
{
      private:
              int toplivo;
              void copy(const pech &p){toplivo=p.toplivo;}
      public:
             pech::pech(int kol){toplivo=kol;}
             void gotovka(){toplivo--;}
             int get_fuel(){return toplivo;}
             pech operator=(const pech &p) {copy(p); return *this;}
             ~pech(){toplivo=0;}       
};
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
13.12.2012, 04:17     linker error #4
Ошибки:
C++
1
2
//              static int bulka::kol_bulok;
              static int kol_bulok;
C++
1
2
//             pekar::pekar()
             pekar()
C++
1
2
//             pekar::pekar(int kol, bulka bbulk)
             pekar(int kol, bulka bbulk)
C++
1
2
//             pech::pech(int kol){toplivo=kol;}
             pech(int kol){toplivo=kol;}
Статический член нужно инициализировать так:

C++
1
2
3
4
5
6
7
8
9
class bulka
{
      private:
//              static int bulka::kol_bulok;
//код всякий      
};
int bulka::kol_bulok= 0;
//ну или по крайней мере просто написать:
//int bulka::kol_bulok;
и всё будет круто
Yandex
Объявления
13.12.2012, 04:17     linker error
Ответ Создать тему
Опции темы

Текущее время: 09:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru