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

Linker Error: undefined symbol - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
19.11.2012, 18:33     Linker Error: undefined symbol #1
Прога компилируется без ошибок, когда запускается, то появляется 10 ошибок. И все одного характера Linker Error: undefined symbol.

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
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
#include "tstud.h"
#include "action.h"
void Gl_Menu()
{
 clrscr();
 gotoxy(33,11); cout<<"1-vvod novih dannih";
 gotoxy(33,12); cout<<"2- prosmotr";
 gotoxy(33,13); cout<<"3- informatsiya o fakultete";
 gotoxy(33,14); cout<<"4 - informatsiya o gruppe";
 gotoxy(33,15); cout<<"ESC - vyhod";
}
void Menu_1()
{
  clrscr();
  gotoxy(33,11); cout<<"1 - c клавиатуры";
  gotoxy(33,12); cout<<"2 - из файла";
}
 
void main()
{
  char ch,ch1, *file_n;
  Action Act(20);
  TStud stud;
  do
  {
   clrscr();
   Gl_Menu();
   ch=getch();
   switch(ch)
   {
     case '1':
      Menu_1();
      ch1=getch();
      switch(ch1)
             {
        case '1':
          clrscr();
          cin>> stud;
              Act.Add(stud);
          break;
        case '2':
           clrscr(); cout<<"введите имя файла ";
          cin>>file_n;
          Act.FromFile(file_n);
           break;
      };
        break;
     case '2':
       clrscr();
       if(Act.GetN()>0) Act .ToScreen();
       break;
     case '3':
       clrscr(); 
       Act.Obrab_Fac();
       break;
     case '4':
       clrscr(); 
       Act.Obrab_Gr();
       break;
    };
  }while(ch!=27);
 if (Act.GetN()>0) 
      { Act.Sort_Spis();  Act.ToFile(); }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "tstud.h" // class's header file
 
// class constructor
istream& operator >> (istream& s, TStud & A)
{
 cout<<"введите шифр факультета: "; s>>A.Shifr_Fac;
 cout<<" введите название факультета: "; s>>A.Name_Fac;
 cout<<" введите шифр группы: "; s>>A.Shifr_Gr;
 cout<<" введите количество студентов в группе"; s>>A.kol_stud;
 cout<<" введите общее количество пропусков в группе"; s>>A.prop;
 cout<<" введите количество пропусков по уважительной причине"; s>>A.uv_prop;
 return s;
}
ostream& operator << (ostream& s, TStud& A)
{
 cout<<" шифр факультета: "; s<<setw(2)<<A.Shifr_Fac<<endl;
 cout<<" название факультета: "; s<<setw(3)<<A.Name_Fac<<endl;
 cout<<" шифр группы: "; s<<setw(5)<<A.Shifr_Gr<<endl;
 cout<<" количество студентов в группе: "; s<<A.kol_stud<<endl;
 cout<<" общее количество пропусков в группе: "; s<<A.prop<<endl;
 cout<<" количество пропусков по уважительной причине: "; s<<A.uv_prop<<endl;
 return s;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
class TStud 
{
  private:
    char Shifr_Fac[3], Name_Fac[4], Shifr_Gr[6];
    int kol_stud;
    int prop;
    int uv_prop;
  friend istream& operator >> (istream&, TStud&);
  friend ostream& operator << (ostream&, TStud&);
 public:
  friend class Action;
};
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Action::Action(int nn)
{  n=0; mas=new TStud[nn]; }
//------------------------------------------------------------
Action::~Action()
{  delete [] mas; n=0; }
//------------------------------------------------------------
void Action::Add(TStud stud)
{  *(mas+n)= stud; n++; }
 //------------------------------------------------------------
void Action::ToFile()
{
  ofstream zap("Spisok.txt");
  if(!zap) 
  {
     cout<<"nevozmozno otkrit fale lkz zapisi.Nazmite lubyy klavishy...";
     getch();  exit(1);
  };
  zap<<n<<endl;
  for(int i=0; i<n; i++)  zap<<*(mas+i);
  zap.close();
  clrscr();
  cout<<"Ввод данных закончен "<<
   "("<<GetN()<<" zap)"<<" Nazmite lubyy klavishy..."; getch();
}
//------------------------------------------------------------
void Action::FromFile(char *fname)
{
  int nn; TStud stud;
  ifstream chten(fname, ios::in|ios::nocreate);
  if(!chten)
    {
    cout<<endl<<"невозможно открыть файл для чтения.Нажмите любую клавишу...";
    getch();  exit(1);
  }
  Clear();
  chten>>nn;
  for(int i=0; i<nn; i++)
  {
    chten>> stud;
    clrscr();cout<< stud; getch();
    Add(stud);
  };
  chten.close();
  clrscr();
  cout<<"Счет завершен. Нажмите любую клавишу..";
}
//------------------------------------------------------------
void Action::Obrab_Fac()
{
  char sh_fac[3];
  int stud=0, propusk=0;
  float  stud_propusk=0;
  TStud *ptr;
  cout<<" введите шифр факультета:";
  cin>> sh_fac;
  for(int i=0; i<n; i++)
  {
    ptr=(mas+i);
    if(strcmp(ptr->Shifr_Fac, sh_fac)==0)
    {
      stud+=ptr->kol_stud;
      propusk+=ptr->prop;
      stud_propusk+=(ptr->prop - ptr->uv_prop);
    }
   }
  if (stud!=0)
  {
   stud_propusk=float (stud_propusk/stud);
    clrscr();
    cout<<"  Информация по факультету "<<sh_fac<<": "<<endl;
    cout<<"  общее количество студентов : "<< stud<<endl;
    cout<<"  Общее количество пропущеных часов: "<< propusk<<endl;
    cout<<"  Среднее количество пропущеных часов на одного студента:
     "<< stud_propusk<<endl;
  }
  else cout<<"Такой факультет не найден"<<endl;
  getch();
}
//------------------------------------------------------------
void Action::Obrab_Gr()
{
  TStud *ptr; int max=0, imax=0;
  if(n>0)
  {
    for(int i=0; i<n; i++)
    {
      ptr=(mas+i);
      if (ptr->uv_prop>max)
      { imax=i; max=ptr->uv_prop; }
     }
   cout<<" Сведения о группе, имеющей макс. кол-во пропусков по ув. причине:"   <<endl;
  cout<<*(mas+imax);
  getch();
 }
}
//------------------------------------------------------------
void Action::Sort_Spis()
{
  TStud tmp, *ptr1, *ptr2;
  if(n>0)
  {
     L1:
     for(int i=0; i<n-1; i++)
     {  ptr1=(mas+i); ptr2=(mas+i+1);
     if (ptr2->prop> ptr1->prop)
      { tmp=*ptr2; *ptr2=*ptr1; *ptr1=tmp; goto L1; }
      }
   }
}
//------------------------------------------------------------
void Action::ToScreen()
{
  int i=0; char ch;
  do
  {
    clrscr();
    cout<<"--- " <<i+1<<"-ая запись из "<< GetN() <<" ----"<<endl;
    cout<<*(mas+i)<<endl;
    ch=getch();
    switch(ch)
    {
      case 0:   ch=getch();
      case 72: if (i==0) i=GetN()-1; else i--; break;  // нажмите  Page Up
      case 80: if (i==GetN()-1) i=0; else i++;           //нажмите Page Down
    }
  } while(ch!=27);      // выход по нажатию Esc
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Action
{
 private:
  int n;
  TStud *mas;
 public:
  int GetN() {return n;}
  Action( int ); 
  ~Action();
  void Clear(){ n=0; }
  void Add(TStud);
  void ToFile();
  void FromFile(char*);
  void Obrab_Fac();
  void Obrab_Gr();
  void Sort_Spis();
  void ToScreen();
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
19.11.2012, 18:36     Linker Error: undefined symbol #2
ну и что же такое по вашему linker?
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 10:45  [ТС]     Linker Error: undefined symbol #3
Ссылка

Добавлено через 15 часов 54 минуты
Помогите разобрать проблему, ошибок нет ну не запускается.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 11:01     Linker Error: undefined symbol #4
Да? а Компоновщик
тут совсем не при чем?

PS тогда бы уж перевели его как "ссылочник"
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:11  [ТС]     Linker Error: undefined symbol #5
А как это сделать?

Добавлено через 1 минуту
Всмысле классы с main ом в один файл поместить?
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 11:13     Linker Error: undefined symbol #6
Думаю что для начала прочитать это
http://forum.codenet.ru/q69347/Linke...ule+myfile.cpp
(первая ссылка в гугле по Linker Error: undefined symbol, причем ваша тема на втором месте в гугле(с чем я вас и поздравляю - скоро возьмём первое ))
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:16  [ТС]     Linker Error: undefined symbol #7
Блин да всё добавлял и галочку ставил и библиотека рабочая....
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 11:17     Linker Error: undefined symbol #8
ну классы я бы не стал помещать вместе с main-ом. это конечно решение проблемы, но кривое.
этим самым в загубите развитие вашей программы. надо разбивать программы на небольшие файлики, в файликах хранить маленькие классы, в классах хранить маленькие методы.(многие нарушают эти правила, но начинающему я не советую нарушать)
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:18  [ТС]     Linker Error: undefined symbol #9
У меня дело в том что так и есть два файла h три cpp. Все аккуратно. Но блин не работает
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 11:21     Linker Error: undefined symbol #10
обычно чтобы добавить какую нить библиотечку надо
1) добавить в исходник #include с хидером библиотеки
2) указать компоновщику где хранятся библиотеки и какие библиотеки нужно подключить
либо просто подключить файлик .cpp к проекту чтобы он скомпилировался вместе с вашими исходниками в объектный файл
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:22  [ТС]     Linker Error: undefined symbol #11
Ну а где тут не добавлено: всё есть
C++
1
2
3
4
5
6
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
#include "tstud.h"
#include "action.h"
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 11:26     Linker Error: undefined symbol #12
надо тогда комментировать весь код в main и закоментировать все #include и подключать их по одному, пока не появиться ошибка, когда она появиться нужно указать компоновщику имя библиотеки, которая должна быть связана с #include файлом
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:29  [ТС]     Linker Error: undefined symbol #13
И так тоже пробывал, библиотеки все есть которые нужны.

Добавлено через 32 секунды
Может всё дело в компиляторе?
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 11:30     Linker Error: undefined symbol #14
могу подсказать что проблема скорее всего в этих модулях

#include <graphics.h>( хотя это может быть тоже из стандартной библиотеки)
#include "tstud.h"
#include "action.h"

может просто надо добавить в проект tstud.cpp action.cpp
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:31  [ТС]     Linker Error: undefined symbol #15
Ну еслиб проблемма была в #include "tstud.h"
#include "action.h" то мнеб при компиляции выдавалобы туеву хучу ошибок
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 11:33     Linker Error: undefined symbol #16
Может всё дело в компиляторе?
может дело и в компиляторе
но мы сейчас обсуждаем проблему, которая реально есть в компоновщике.

хотя у меня не бывало ситуаций, чтоб gcc как-то неправильно работал
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:36  [ТС]     Linker Error: undefined symbol #17
Так что мне делать? Я уже проверял препроверял 3 дня всё. Заново переписывал и т д .
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
20.11.2012, 11:38     Linker Error: undefined symbol #18
А щас чё у тебя, на каком этапе всё это дело?
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:39  [ТС]     Linker Error: undefined symbol #19
Ну прога написана при компиле ошибок нет. А при запуке 10 ошибок линкер ерор к каждому обработчику цепляет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2012, 11:45     Linker Error: undefined symbol
Еще ссылки по теме:

C++ [Linker error] undefined reference to 'r'
Собрать многофайловый проект в Turbo C++ (ошибка Linker error Undefined symbol f (int) in module) C++
[Linker Error] undefined reference to C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
20.11.2012, 11:45     Linker Error: undefined symbol #20
Цитата Сообщение от Vadim8063 Посмотреть сообщение
А при запуке 10 ошибок линкер ерор к каждому обработчику цепляет
скинь мне экзешник
Yandex
Объявления
20.11.2012, 11:45     Linker Error: undefined symbol
Ответ Создать тему
Опции темы

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