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

Unresolved external. Borland ругается - C++

Восстановить пароль Регистрация
 
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
08.02.2013, 02:48     Unresolved external. Borland ругается #1
Всем доброго времени! в общем проблема такова, в классе Name имеется статический объект класса fstream f1. При таком раскладе Борланд отказывается компилировать эту программу. Выдает следующее сообщение:

[Linker Error] Unresolved external 'Name::f1' referenced from C:\PROGRAM FILES (X86)\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ

Если же сделать объект f1 глобальной переменной - всё функционирует превосходно. В чем есть трабла, друзья? Вот код:

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
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
 
//---------------------------------------------------------------------------
 
class Name
{
 private:
  static fstream f1;
  string s1;
  string s2;
  int num;
 public:
  Name()
  {}
  static openFile ( )
  {
   f1.open("dat.txt", ios::in | ios::out | ios::binary );
  }
  void setPos ( )
  {
   f1.seekg(0);
   f1.seekp(0);
  }
  void writeData()
  {
   char ans = 'y';
   while( ans == 'y' )
   {
    cout << "\nEnter employer's name: ";
    cin >> s1;
    cout << "\nEnter employer's surname: ";
    cin >> s2;
    cout << "\nEnter employer's number: ";
    cin >> num;
    f1.write(reinterpret_cast<char*>(&(*this)),sizeof(*this));
    cerr << "\nContinue?(Y/N): ";
    cin >> ans;
   }
  }
 
  void readData( )
  {
 
   f1.read(reinterpret_cast<char*>(&(*this)), sizeof(*this));
   cout << "\n Employer's name: " << s1;
   cout << "\n Employer's surname: " << s2;
   cout << "\n Employer's number: " << num << endl;
  }
};
 
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
  Name obj;
 
  obj.openFile();
  obj.writeData();
  obj.setPos();
  obj.readData();
 
   system("PAUSE");
 
        return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
08.02.2013, 03:18
  #2

Не по теме:

fuzzytoozy, старый борланд Си не умеет линоквать современный стандрат плюсов и систем пауз тоже не знает. Либо смени компилятор либо верни хедерам старый стиль, убери namespace std ну и потом по коду компилятор ещё пару ероров тебе выдаст

fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
08.02.2013, 04:32  [ТС]     Unresolved external. Borland ругается #3
это не первый код, который я пишу на борланде этом. Borland Builder 6. Как я уже сказал, если объявить объект fstream глобальной переменной, а не классовой, то всё скомпилируется превосходно ( включая систему пауз ). Он выдает подобную ошибку лишь иногда и я не понимаю от чего это зависит =/
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
08.02.2013, 05:46     Unresolved external. Borland ругается #4
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>
#include <fstream>
#include <cstring>
#include <string>//string используем, а подключать нафиг не надо, да?
using namespace std;
 
//---------------------------------------------------------------------------
 
class Name
{
 private:
  static fstream f1;
  string s1;
  string s2;
  int num;
 public:
  Name()
  {}
  static void openFile ( )//ДОБАВИЛ void
  {
   f1.open("dat.txt", ios::in | ios::out | ios::binary );
  }
  void setPos ( )
  {
   f1.seekg(0);
   f1.seekp(0);
  }
  void writeData()
  {
   char ans = 'y';
   while( ans == 'y' )
   {
    cout << "\nEnter employer's name: ";
    cin >> s1;
    cout << "\nEnter employer's surname: ";
    cin >> s2;
    cout << "\nEnter employer's number: ";
    cin >> num;
    f1.write(reinterpret_cast<char*>(&(*this)),sizeof(*this));
    cerr << "\nContinue?(Y/N): ";
    cin >> ans;
   }
  }
 
  void readData( )
  {
 
   f1.read(reinterpret_cast<char*>(&(*this)), sizeof(*this));
   cout << "\n Employer's name: " << s1;
   cout << "\n Employer's surname: " << s2;
   cout << "\n Employer's number: " << num << endl;
  }
};
fstream Name:: f1;//Читайте про статические переменные в классе
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
  Name obj;
 
  obj.openFile();
  obj.writeData();
  obj.setPos();
  obj.readData();
 
   system("PAUSE");
 
        return 0;
}
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
08.02.2013, 23:19  [ТС]     Unresolved external. Borland ругается #5
Croessmah, спасибо конечно, но что по вашему делает инклуд <cstring>, как не включает string?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
08.02.2013, 23:47     Unresolved external. Borland ругается #6
fuzzytoozy, cstring не включает std::string. Он включает сишные функции по работе с чаровыми строками
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
09.02.2013, 18:16  [ТС]     Unresolved external. Borland ругается #7
I.M., компилятор при включении этого файла на стринг не ругается совсем и всё прекрасно компилирует

Добавлено через 4 минуты
тем не менее я вас понял, спасибо.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.02.2013, 18:18     Unresolved external. Borland ругается #8
статическая переменная-член класса должна быть объявлена ещё и снаружи класса.
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
09.02.2013, 21:13  [ТС]     Unresolved external. Borland ругается #9
Kuzia domovenok, спасибо
Croessmah, уже об этом сказал, чем помог. Так что вопрос решен =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 16:19     Unresolved external. Borland ругается
Еще ссылки по теме:

C++ Ошибка Unresolved external
C++ unresolved external symbol
Unresolved external symbol C++

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

Или воспользуйтесь поиском по форуму:
MasMaX
 Аватар для MasMaX
7 / 7 / 0
Регистрация: 07.02.2012
Сообщений: 71
28.03.2013, 16:19     Unresolved external. Borland ругается #10
Кидайте в меня тапками, но я так и не смог разобраться с проблемой Unresolved external.

Код
[Linker Error] Unresolved external '__fastcall Forms::TScrollingWinControl::AdjustClientRect(Types::TRect&)' referenced from имя_файла.OBJ
[Linker Error] Unresolved external '__fastcall Forms::TCustomForm::AlignControls(Controls::TControl *, Types::TRect&)' referenced from имя_файла.OBJ
[Linker Error] Unresolved external '__fastcall Controls::TWinControl::CustomAlignInsertBefore(Controls::TControl *, Controls::TControl *)' referenced from имя_файла.OBJ
[Linker Error] Unresolved external '__fastcall Controls::TWinControl::CustomAlignPosition(Controls::TControl *, int&, int&, int&, int&, Types::TRect&, const Controls::TAlignInfo&)' referenced from имя_файла.OBJ
[Linker Error] Unresolved external '__fastcall Comctrls::TCustomStatusBar::SetSimpleText(const System::AnsiString)' referenced from имя_файла.OBJ
[Linker Error] Unresolved external '__fastcall Graphics::TCanvas::FillRect(const Types::TRect&)' referenced from имя_файла.OBJ
[Linker Error] Unresolved external '__fastcall Graphics::TCanvas::Rectangle(const Types::TRect&)' referenced from имя_файла.OBJ
[Linker Error] Unresolved external '__fastcall Graphics::TCanvas::StretchDraw(const Types::TRect&, Graphics::TGraphic *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\OBJ\JPEG.OBJ
Ошибка появляется при отключении галочки "Build with runtime packages". Программа должна работать на разных компах, поэтому нужно иметь все библиотеки в себе.

Дело по-моему в настройках Biuilder 6, потому что была переустановка билдера и старые проекты не трогались, и раньше работали. Пробовал создавать новый проект и в него импортировать все формы, но это не помогает.
Yandex
Объявления
28.03.2013, 16:19     Unresolved external. Borland ругается
Ответ Создать тему
Опции темы

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