Форум программистов, компьютерный форум 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();
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:51  [ТС]     Linker Error: undefined symbol #21
Может лучше файлы с классами и мейн?

Добавлено через 4 минуты
http://narod.ru/disk/63844040001.5f7...8f/BC.rar.html
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
20.11.2012, 11:57     Linker Error: undefined symbol #22
алё, мне как запускать-то?
+++++++++++++++++++++++++++++++++++++++++++++++++
Цитата Сообщение от Vadim8063 Посмотреть сообщение
А при запуке 10 ошибок линкер ерор к каждому обработчику цепляет
ты как запускаешь-то без экзешника?

Добавлено через 43 секунды
Цитата Сообщение от Vadim8063 Посмотреть сообщение
Может лучше файлы с классами и мейн?
не лучше, если бы мне нужны были эти файлы, я бы так и сказал.
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 11:57  [ТС]     Linker Error: undefined symbol #23
В борланд с++
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
20.11.2012, 12:04     Linker Error: undefined symbol #24
Ну ясно всё. В общем, никакого запуска ты не производишь, нет у тебя экзешника. Спотыкаешься ты на стадии линковки, почему ты называешь её запуском- вот вопрос. (назвал бы компиляцией- куда ни шло.)

Что КОНКРЕТНО пишет линковщик? Я понимаю, он не может определить символ; какой именно?
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 12:16  [ТС]     Linker Error: undefined symbol #25
Undefined symbol action::toscreen() in module MAIN
Undefined symbol action::fromfile(char near*) in module MAIN
Undefined symbol action::add(tstud)
Undefined symbol operator >>(istream near&,tstud near&)
Undefined symbol action::~action()
Undefined symbol action::tofile()
Undefined symbol action::sort_spis()
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
20.11.2012, 12:48     Linker Error: undefined symbol #26
НУ ясно всё. Взять, к примеру, первую ошибку:
C++
1
Undefined symbol action::toscreen() in module MAIN
Функция toscreen вызывается из модуля main и видно что как-то неудачно. Она у тебя определена в файле action.CPP; Всё ничё, но этот файл action.CPP никаким боком к main.cpp отношения не имеет. action.h виден, да; action.CPP не виден. То есть он просто как аппендицит. Выходов несколько, для начала можешь просто содержимое файла action.CPP перенсти в action.h, ну то есть чтобы в последнем было:

объявление класса
определение функций-членов класса.

как-то так.
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 12:49  [ТС]     Linker Error: undefined symbol #27
Спасибо. Блин борланд хреновая тема, в студии всё бы работало только жалко графики там нету
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 13:06     Linker Error: undefined symbol #28
это тоже криво, если человек не осознано пишет методы класса в хидере
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
20.11.2012, 13:10     Linker Error: undefined symbol #29
Цитата Сообщение от XRuZzz Посмотреть сообщение
это тоже криво
кто может сделать лучше пусть сделает.

Добавлено через 40 секунд
Цитата Сообщение от Vadim8063 Посмотреть сообщение
Спасибо. Блин борланд хреновая тема, в студии всё бы работало только жалко графики там нету
Твой выбор Dev-Cpp

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
человек не осознано пишет методы класса в хидере
Не ну как неосознанно- я же объяснил зачем это надо, значит, осознанно.

XRuZzz
20.11.2012, 13:42
  #30

Не по теме:

ну лано шаманство, так шаманство, я не против мне интересней, что вы с exe файлом собирались делать?

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.11.2012, 14:07     Linker Error: undefined symbol #31
Vadim8063, поместите всё из action.CPP и tstud.cpp в файл с main() и не мучайтесь.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.11.2012, 14:12     Linker Error: undefined symbol #32
Но если говорить, как правильно, то надо создать проект, в который добавить все используемые файлы .cpp
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.11.2012, 14:19     Linker Error: undefined symbol #33
Совершенно согласен, но у ТС незнакомая мне среда: Borland c++ 3.1, и что, и как там не знаю.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.11.2012, 14:25     Linker Error: undefined symbol #34
Ну вот именно так. "Project->Open project" а потом "Project->Add item".
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
20.11.2012, 15:20     Linker Error: undefined symbol #35
Цитата Сообщение от XRuZzz Посмотреть сообщение

Не по теме:

ну лано шаманство, так шаманство, я не против мне интересней, что вы с exe файлом собирались делать?

да не нужен он мне был, мне просто нужно было удостовериться, что его нет.
_________
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 15:21  [ТС]     Linker Error: undefined symbol #36
Блин перенос из cpp в h ничего не решил
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.11.2012, 15:27     Linker Error: undefined symbol #37
А если сделать как я посоветовал?
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 15:31  [ТС]     Linker Error: undefined symbol #38
Появляются другие ошибки.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 15:33     Linker Error: undefined symbol #39
так создайте новый проект
int main()
{
return 1;
}

и попробуйте скомпилировать.
если успешно подключите один из .h добавив в проект соответствующий .cpp

и напишите что получилось
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2012, 15:37     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++

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

Или воспользуйтесь поиском по форуму:
Vadim8063
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
20.11.2012, 15:37  [ТС]     Linker Error: undefined symbol #40
Ну если новый создать то подключается все h
Yandex
Объявления
20.11.2012, 15:37     Linker Error: undefined symbol
Ответ Создать тему
Опции темы

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