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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Artyom
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 10
#1

Учебное расписание: Unresolved externals - C++

30.11.2008, 17:10. Просмотров 1360. Ответов 10
Метки нет (Все метки)

Добрый день!
Мне нужно создать программу в Microsoft Visual Studio 2005 для введения данных, их вывода на экран и проверкой правильности введенных данных. Причем необходимо создать класс с полями, методами, конструкторами инициализации и копирования. Обьявление класса оформить в заголовковом файле *.cpp, реализацию методов в отдельном файле, функцию main в отдельном файле *.cpp, объединить модули в проекте. Одно из полей должно быть динамическим массивом.
Структура данных такова:
Элемент расписания учебы -
номер занятия на неделе(?)(число >=1 и <=30)
день недели(проверка на соответствие строковым константам sun, mon, tue, wed, thu, fri, sat)
номер пары(число >=1 и <=5)
название предмета(без проверки, это поле и должно быть динамическим массивом)

Вот мой код:
файл с методами:
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
// lab2.cpp : Defines the entry point for the console application.
//
#include "lab3.h"
//#include <stdio.h>
#include <iostream>
using namespace std;
 
 
Cstudies::Cstudies(int cnumber_w, char cday[4], int cnumber_s,char *cname)
{       int n = 256;
        Cstudies *cn;
        cn = new Cstudies[n];
        //name=(char *) new(256);
        //Cstudies *cn = NULL;
        cout<<"Constructor...\n";
        number_w = cnumber_w;
        strcpy_s(day,cday);//day=cday;
        number_s = cnumber_s;
        strncpy_s(cname,256,Cstudies::name,256);
        //*name=*cn;
}
Cstudies::Cstudies(const Cstudies &r) { cout<<"\nConstructor of copying...\n";*this=r; }
 
Cstudies::~Cstudies()
{       
    delete[] cn;
}
void Cstudies::Changenumber(void){
    //char *cname=name;
        do
    {
        printf("Input correct week number of studies: ");
        cin>>number_w;
        
    } while ((number_w>30)||(number_w<1));
        do
    {
        printf("Input correct day of studies (sun/mon/tue/wed/thu/fri/sat): ");
        cin>>day;
        
    } while ((strcmp(day,"sun")!=0)&&(strcmp(day,"mon")!=0)&&(strcmp(day,"tue")!=0)&&(strcmp(day,"wed")!=0)&&(strcmp(day,"thu")!=0)&&(strcmp(day,"fri")!=0)&&(strcmp(day,"sat")!=0));
    do
    {
        printf("Input correct day number of studies: ");
        cin>>number_s;
    } while ((number_s<1)||(number_s>6));
    do  
    {
        printf("Input correct name of studies: ");
        cin>>name;
 
            
    } while (1 == 0);
    //strcpy(name,cname);
    //name = (char *) malloc(strlen(cname));
    //name = cname;
    
 
};
 
void Cstudies::Show(void){
    
    cout<<'\n';
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",0xc9,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd
       ,0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xbb);
printf("%c   Number   %c       Day       %c   Day Number  %c     Name      %c\n",0xba,0xba,0xba,0xba,0xba,0xba);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",0xcc,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd
       ,0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xb9);
printf("%c%12d%c%17s%c%15d%c%15s%c\n",0xba,number_w,0xba,day,0xba,number_s,0xba,name,0xba);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd
       ,0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xbc);
cout<<'\n';
//  return 0;
};
файл с процедурой main
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
#include "lab3.h"
#include <iostream>
using namespace std;
int main()
{  char c;
        
 
    
    Cstudies studies(1,"mon",1,"oop");
    studies.Show();
    Cstudies CopyStudies(studies);
    CopyStudies.Show();
    studies.Changenumber();
    studies.Show();
            
        for (;;) {
            cout<<"Do you want to change the entries? (y/n)\n";
            cin>>c;
            if (c == 'y')
                {
                    studies.Changenumber();
                    studies.Show();
                    //break;
                } 
            if (c == 'n') break;
            //cout<<"\nError...\nOnly 'y' or 'n'\n";
            
            }
    
    return 0;
}
заголовковый файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Cstudies{
        int number_w;
        char day[4]; //day of week (sun,mon,tue,wed,thu,sat)
        int number_s;
        char *name;
 
        Cstudies *cn;
 
        
 
    public:
    Cstudies(int cnumber_w, char cday[4],int cnumber_s, char *cname);//конструктор (объявление функции конструктора класса)
    Cstudies(const Cstudies &r);
    Cstudies();
    ~Cstudies();
    void Changenumber(void);
    void Show(void);
    void Change(void);
    
};
Вообщем, проблема в том, что при компиляции выдается абсолютно непонятные для меня ошибки:

lab_3_proc.obj : error LNK2019: unresolved external symbol "public: __thiscall Cstudies::Cstudies(void)" (??0Cstudies@@QAE@XZ) referenced in function "public: __thiscall Cstudies::Cstudies(int,char * const,int,char *)" (??0Cstudies@@QAE@HQADHPAD@Z)

C:\Documents and Settings\Администратор\Рабочий стол\lab3\Debug\lab3.exe : fatal error LNK1120: 1 unresolved externals

Искал решение проблемы, в одном из форумов наткнулся на мысль, что проблема в библиотеках. Я подключил все возможные библиотеки, но программа так и не заработала. Все, у кого похожие задания, работали с памятью с помощью malloc и free... Я почитал литературу по C++ и решил сделать, как полагается, с помощью new и delete, но возникли проблемы. Подскажите, пожалуйста, в чем здесь дело.
0
Вложения
Тип файла: zip lab3.zip (1.84 Мб, 24 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2008, 17:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Учебное расписание: Unresolved externals (C++):

3 unresolved externals - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &quot;conio.h&quot; #include &lt;vector&gt; #include &lt;set&gt; #include &lt;numeric&gt; using namespace...

Unresolved externals - C++
Здравствуйте. Объявил такую функцию : std::string SplitFileName ( std::string&amp; data) { std::string fileName; int i =...

Unresolved externals в ооп - C++
Добрый день, переделывал конструкторы в одной лабе, вроде все сделал, но теперь выдает две ошибки 2019 и соответственно одну 1120. Не могу...

Ошибка LNK1120: 4 unresolved externals - C++
Добрый день. Помогите решить проблему с возникающей ошибкой. Причину самостоятельно найти не могу. Заранее благодарен! Содержание...

Unresolved externals при подключении mpi - C++
Здравствуйте! Установил библиотеку MPI с оффсайта. Написал вот такой кодик. Программа при компиляции выдает ошибки на каждый метод из этой...

FATAL ERROR LNK1120: 1 unresolved externals SOS! - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; int main() { int a, factorial(int i); int x=0; int i,b,k=0; ...

10
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
01.12.2008, 11:49 #2
для определения конструктора Cstudies() нет тела самой ф-ции
можно объявить так:
Код
class Cstudies{
.....
    public:
        Cstudies()[B]{}[/B];
....
1
Artyom
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 10
08.12.2008, 05:44  [ТС] #3
Спасибо, oxotnik! Наконец-то откомпилировалось.
Возникла другая проблема: программа запускается,выдает надпись "Constructor...", а потом выдается такая ошибка: Unhandled exception at 0x1022f64e (msvcr80d.dll) in lab3.exe: 0xC0000005: Access violation reading location 0xcccccccc. Это из-за неправильного выделения памяти под динамический массив? Что неправильно?

Добавлено через 15 часов 53 минуты 0 секунд
Я попробовал добавить меню переделать все почти заново, но у меня снова не получилось =/
Книга Страуструпа ничем не помогла, очень сложно там находить необходимую иформацию, поскольку я плохо ориентируюсь в предмете.
Вот мой код:
Заголовковый файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Studies{
        unsigned int SIZE;
        int number_w;
        char day[4]; //строка - день недели (sun,mon,tue,wed,thu,sat)
        int number_s;
        char *name;
        Studies *ptr;
    public:
    Studies(int cnumber_w,char[4] cday,int cnumber_s,char *cname);//конструктор инициализации
    Studies(const Studies &r);//конструктор копирования
    Studies(){};
    ~Studies();//деструктор
    void Change(void);
    void Show(void);
    void Menu(void);
    };
функция main:
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
#include "lab4.h"
#include <iostream>
using namespace std;
int main()
{   char c;
    char flag;
    Studies studies(1,"mon",1,"oop");
    studies.Show();
for(;;)
{
    Studies::Menu();
    cin>>flag;
    switch ( flag )
    {
    case '1': studies.Change();
    case '2': studies.Show();
    case '3': break;
    default: cout<<"Try again\n";
        Studies::Menu();
    }
}   
    
    return 0;
}
файл с методами
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
#include "lab4.h"
//#include <stdio.h>
#include <iostream>
using namespace std;
 
 
Studies::Studies(int cnumber_w, char cday[4], int cnumber_s,char *cname)
{       cout<<"Constructor...\n";
        ptr = new Studies[256];
        number_w = cnumber_w;
        cday = Studies::day;
        number_s = cnumber_s;
        cname = Studies::name;
}
Studies::Studies(const studies& right)//конструктор копирования
{
    s = new char[right->SIZE];
    strcpy(Studies::name,right->Studies::name);
}
 
Studies::~Studies()
{
    delete[] ptr;
}
void Studies::Change(void)
{
        do
    {
        printf("Input correct week number of studies: ");
        cin>>number_w;
        
    } while ((number_w>30)||(number_w<1));
        do
    {
        printf("Input correct day of studies (sun/mon/tue/wed/thu/fri/sat): ");
        cin>>day;
        
    } while ((strcmp(day,"sun")!=0)&&(strcmp(day,"mon")!=0)&&(strcmp(day,"tue")!=0)&&(strcmp(day,"wed")!=0)&&(strcmp(day,"thu")!=0)&&(strcmp(day,"fri")!=0)&&(strcmp(day,"sat")!=0));
    do
    {
        printf("Input correct day number of studies: ");
        cin>>number_s;
    } while ((number_s<1)||(number_s>6));
    do  
    {
        printf("Input correct name of studies: ");
        cin>>name;
 
            
    } while (1 == 0);
};
 
void Studies::Show(void){   
    cout<<'\n';
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
       0xc9,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xbb);
printf("%c   Number   %c       Day       %c   Day Number  %c     Name      %c\n",0xba,0xba,0xba,0xba,0xba,0xba);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
       0xcc,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xb9);
printf("%c%12d%c%17s%c%15d%c%15s%c\n",0xba,number_w,0xba,day,0xba,number_s,0xba,name,0xba);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
       0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
       0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xbc);
cout<<'\n';
//  return 0;
};
 
void Studies::Menu(void)
{
    printf("+---------------------+\n");
    printf("| Make your choice:   |\n");
    printf("|                     |\n");
    printf("|1. Change data       |\n");
    printf("|                     |\n");
    printf("|2. Show              |\n");
    printf("|                     |\n");
    printf("|3. Exit              |\n");
    printf("+---------------------+\n");
    printf("->");
}
Помогите, пожалуйста, разобраться, а то я не знаю с какой стороны его начать исправлять. Чем больше читаю и исправляю, тем больше путаюсь.
0
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
09.12.2008, 10:04 #4
у тебя в конструкторе:
Код
Studies::Studies(int cnumber_w, char cday[4], int cnumber_s,char *cname)
{
...
Studies *ptr = new Studies[256]; // здесь зацикливается
....
}
каждый раз при вызове нового конструктора еще 256 раз вызывается конструктор, т.е. разрастается до бесконечности в геометрической прогрессии.
Надо что то в алгоритме менять
1
Artyom
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 10
18.12.2008, 04:03  [ТС] #5
У меня получилось, все работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Cstudies{
        int number_w;
        char day[4]; //day of week (sun,mon,tue,wed,thu,sat)
        int number_s;
        char *name;
        int namesize;
        int* cn;
        int arr[8.80];
    public:
        Cstudies(int cnumber_w, char cday[4],int cnumber_s, char *cname);//конструктор (объявление функции конструктора класса)
    Cstudies(const Cstudies &r);
    Cstudies(){};
    ~Cstudies();
    void Show(void);
    void Change(void);
    void Menu(void);
    };
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 "lab3.h"
#include <iostream>
using namespace std;
int main()
{  char c;
    Cstudies studies(1,"day",1,"name");
    /*studies.Show();
    Cstudies CopyStudies(studies);
    CopyStudies.Show();*/
for(int i=1;i!=0;)
{
    studies.Menu();
    cin>>c;
    switch (c)
    {
    case '1': {studies.Change(); break;}
    case '2': {studies.Show(); break;}
    case '3': {i=0;}
    default: {cout<<"Try again"; break;}
    }
}
    return 0;
}
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
#include "lab3.h"
#include <iostream>
using namespace std;
 
 
Cstudies::Cstudies(int cnumber_w, char cday[4], int cnumber_s,char *cname)
{       cout<<"Constructor...\n";
        namesize = 256;
        name = new char[namesize];
        name[0] = 0;
        number_w = cnumber_w;
        strcpy_s(Cstudies::day,4,cday);
        number_s = cnumber_s;
}
Cstudies::Cstudies(const Cstudies &r) { cout<<"\nConstructor of copying...\n";*this=r; }
 
Cstudies::~Cstudies()
{
    delete[] name;
}
void Cstudies::Change(void){
 
        do
    {
        printf("Input correct week number of studies: ");
        cin>>number_w;
        
    } while ((number_w>30)||(number_w<1));
        do
    {
        printf("Input correct day of studies (sun/mon/tue/wed/thu/fri/sat): ");
        cin>>day;
        
    } while ((strcmp(day,"sun")!=0)&&(strcmp(day,"mon")!=0)&&(strcmp(day,"tue")!=0)&&(strcmp(day,"wed")!=0)&&(strcmp(day,"thu")!=0)&&(strcmp(day,"fri")!=0)&&(strcmp(day,"sat")!=0));
    do
    {
        printf("Input correct day number of studies: ");
        cin>>number_s;
    } while ((number_s<1)||(number_s>6));
    do  
    {
        printf("Input correct name of studies: ");
        cin>>name;
 
            
    } while (1 == 0);
 
};
 
void Cstudies::Show(void){
    
    cout<<'\n';
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",0xc9,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd
       ,0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcb,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xbb);
printf("%c   Number   %c       Day       %c   Day Number  %c     Name      %c\n",0xba,0xba,0xba,0xba,0xba,0xba);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",0xcc,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd
       ,0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xce,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xb9);
printf("%c%12d%c%17s%c%15d%c%15s%c\n",0xba,number_w,0xba,day,0xba,number_s,0xba,name,0xba);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd
       ,0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xbc);
cout<<'\n';
//  return 0;
};
 
void Cstudies::Menu(void)
    {
 
        printf("\n\n");
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",0xc9,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd
       ,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xbb);
printf("%c      1. Enter class                   %c\n",0xba,0xba);
printf("%c                                   %14c\n",0xba,0xba);
printf("%c      2. Show the class            %c\n",0xba,0xba);
printf("%c                                   %14c\n",0xba,0xba);
printf("%c      3. Close                 %c\n",0xba,0xba);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd
       ,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xbc);
    }
Мне теперь нужно для объектов этого класса определить перегруженные операции:
1. добавление объектов
2. сравнение объектов
3. превращение типов
4. вызова функций
не подскажете, как это сделать?
0
Artyom
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 10
10.04.2009, 21:48  [ТС] #6
Я пытался недавно создать динамический массив объектов класса для описанной структуры, и столкнулся с некоторыми проблемами. Я хочу использовать vector stl для создания такого массива, поскольку использование такого контейнера избавляет от необходимости писать заново функции добавления элементов к массиву, удаления и т. п.
Но у меня не получается добавить элемент к массиву. Вот здесь описан похожий пример. Там написано, что это хрестоматийная проблема, и на ее примере можно понять необходимость использования конструкторов копирования для объектов, помещаемых в контейнер. Я прошу помочь мне в понимании того, как работает память при попытке записывания объекта в массив, и почему происходит вылет программы. Где об этом можно прочесть? Я читал лекции, книгу Дейтелов, там написано, разумееется, что конструктор инициализации используется для заданию объекту начального значения, конструктор копирования - для создания в памяти копии объекта, а деструктор - для освобождения памяти, но это не дает понимания того, почему происходит ошибка. Если кто-нибудь поможет с кодом, буду очень благодарен.
header.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Pair //Элемент расписания занятий в университете - пара
{
public:
    int number_zt; //номер занятия на неделе(?)
    char day[4];//день недели в международном формате: sun, mon etc.
    int number;//номер занятия
    char * name;//название занятия
};
class FPair : public Pair
{
public:
    int amount; //кол-во студентов, пришедших на пару
};
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
#include "header.h"
#include <vector>
#include <iostream>
#include <conio.h>
using namespace std;
 
void main()
{
    std::vector<FPair> vec;
    for (bool i = 0; i != 1;)
    {
    cout << endl
         << "1. Show all records" << endl
         << "2. Add a record" << endl
         << "3. Insert a record to position" << endl
         << "4. Delete a record from position" << endl
         << "5. Find a record by its position" << endl
         << "6. Count amount of records" << endl
         << "7. Exit" << endl;
    char ch;
    ch = _getch();
    system("cls");
    switch (ch)
    {
        case '1' : {cout<<"100";} break;
        case '2' : { FPair Temp;
                    cout << "Input number of pair on week" << endl;
                    cin >> Temp.number_zt;
                    cout << "Input day" << endl;
                    cin >> Temp.day;
                    cout << "Input number of pair" << endl;
                    cin >> Temp.number;
                    cout << "Input name of pair" << endl;
                    cin >> * Temp.name; // вот здесь после ввода строки программа вылетает
                    cout << "Input amount of students who came" << endl;
                    cin >> Temp.amount;
                    vec.push_back(Temp);} break;
        case '3' : {cout<<"300";} break;//просто проверка, тут и ниже еще нет функций
        case '4' : {cout<<"400";} break;
        case '5' : {cout<<"500";} break;
        case '6' : {cout << "There are " << vec.size() << " elements" << endl;} break;
        case '7' : {i = 1;} break;
        default  : {cout << "Try again, please";} break;
    };
 
    }; //endfor
};
0
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
10.04.2009, 21:52 #7
звездочку убери перед Temp.name;
0
Artyom
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 10
10.04.2009, 22:04  [ТС] #8
Цитата Сообщение от oxotnik Посмотреть сообщение
звездочку убери перед Temp.name;
я уже пробовал со звездочкой, и без звездочки, и с двумя звездочками (массив указателей на указатели - безразмерный массив) - все равно вылетает. насколько я понял, тут нужно передавать в push_back не фактические значения, а указатели на элемент структуры, и правильно освободить память после передачи с помощью деструктора, потому что стандартный деструктор работает неправильно и приводит к переполнению стека
0
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
10.04.2009, 22:20 #9
а память то кто будет выделять для этого?
0
Artyom
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 10
11.04.2009, 01:09  [ТС] #10
Так в контейнере же есть вроде стандартный конструктор, который и выделяет память для хранения объекта. Надо память вручную выделить?
0
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
11.04.2009, 01:45 #11
cin >> * Temp.name; // вот здесь после ввода строки программа вылетает
Правильно и делает, так как oxotnik написал.
Цитата Сообщение от Artyom Посмотреть сообщение
Так в контейнере же есть вроде стандартный конструктор, который и выделяет память для хранения объекта.
вот для объектов, а не полей этих объектов.
И где где это у вас FPair Temp; был в "контейнер" помещён?
Впрочем так сделайте:
C++
1
2
3
4
5
6
7
8
9
class Pair //Элемент расписания занятий в университете - пара
{
public:
        int number_zt; //номер занятия на неделе(?)
        char day[4];//день недели в международном формате: sun, mon etc.
        int number;//номер занятия
        //char * name;//название занятия
        string name;// так проще только , #include <string> нужно добавить
};
ну и здесь
C++
1
cin >> /* * */ Temp.name; // звёздочку убери перед Temp.name;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2009, 01:45
Привет! Вот еще темы с ответами:

В линейном алгоритме выдает ошибку: 1 unresolved externals - C++
пишу на Visual C++ 2012 (сюда обратился так как знающего люду больше) выдает ошибку - помогите кто чем может ошибка такая: fatal error...

Помогите исправить ошибку в коде (fatal error LNK1120: unresolved externals) я новичек - C++
Народ, всем доброго вечера! помогите пожалуйста найти линк еррор. Вот мой код // SavingsAccount.h #ifndef SAVINGSACCOUNT_H #define...

Unresolved external symbol, unresolved token - C++
Всем привет. У меня тут такое дело: // learncpp.cpp : main project file. #include &quot;stdafx.h&quot; int main() { const int...

Реализовать программу, позволяющую вводить с клавиатуры расписание авиарейсов, выводить на экран расписание це - C++
Расписание авиарейсов содержит следующую информацию о рейсе: номер рейса, пункт отправления, пункт назначения, тип самолёта. Реализовать...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
11.04.2009, 01:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru