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

Первая раздельная компиляция. Подскажите ошибки. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
11.10.2011, 01:15     Первая раздельная компиляция. Подскажите ошибки. #1
golf.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
const int Len =40;
const int Size =3;
 
struct golf{
       char fullname[Len];
       int handicap;
       };
       
 
void setgolf(golf & g, const char *name, int hc);
 
int setgolf(golf & g);
 
void showgolf(const golf & g);
 
void save(const golf & ct,int l,int k);
file 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include "golf.h"
 
extern golf *ch;
    
int main()
{
    setlocale(LC_ALL, "rus");
    
    int k,l;
    
    golf ludi;
    
    const char * name = "Vitaliy. ";
    int hc=10;
    
    setgolf(ludi,name,hc);
    
    showgolf(ludi);
    
    cout << "Сколько учасников: ";
    cin>> k;
    cin.get();
    
    save(ludi,0,k);
    
    for (int i=0; i<k; i++){
        
        l=setgolf(ludi); 
        
        showgolf(ludi);
        cout <<endl << "Если имя не ввели 1, если есть 0: " << l << endl;
        cout << "=====================================";
        
        save(ludi,i+1,k);
}
 
        cout << "\nСохраненные структуры:\n";
        for(int i=0; i<k+1; i++){
                for (int j=0; ch[i].fullname[j]!='.'&&j<20 ; j++)
                    cout << ch[i].fullname[j];
                    cout << endl;
                cout << ch[i].handicap << endl;
                }
 
    delete [] ch;
    cout << "\n\n\n";
    system("PAUSE");
    return 0;
}
file 2
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
#include <iostream>
#include <cctype>
#include "golf.h"
 
static int schet=0;
golf *ch;
int kkl=0;
 
void setgolf(golf & g, const char *name, int hc){
     for (int i=0; name[i]!='\0'; i++,schet++)
     g.fullname[i]=name[i];
     g.handicap=hc;
}
     
 
int setgolf(golf & g){
    
    int k;
    char ch;
    int i=0;
    schet=0;
    
    cout << "\nВведите имя игрока: ";
    while(ch!='\n'){
                    ch=cin.get();
                    g.fullname[i]=ch;
                    schet++;
                    i++;
                    }
                    
                    
    cout << "Введите фору: ";
    cin>> g.handicap;
    cin.get();
    
    if(isalpha(g.fullname[0]))
    k=0;
    else 
    k=1;
    
    
    return k;
}
 
void showgolf(const golf & g){
     if (kkl>0)
     cout << endl;
     
             cout << "Имя игрока: ";        
                    for (int i=0; i<schet; i++)
                    cout << g.fullname[i];
                    
             cout << "Его фора: " << g.handicap << endl;
             kkl++;
}
 
 
void save(const golf & ct,int l,int k){
     if(l==0)
     ch = new golf[k+1];
     
     ch[l]=ct;
     }
С массивами проблема прям выводит все 40 знаков.... Я как мог ограничил: точкой...)
Миниатюры
Первая раздельная компиляция. Подскажите ошибки.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2011, 01:15     Первая раздельная компиляция. Подскажите ошибки.
Посмотрите здесь:

Раздельная компиляция ошибка LNK2019 C++
C++ Раздельная компиляция
Раздельная компиляция файлов C++
раздельная компиляция C++
Раздельная компиляция и шаблоны C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.10.2011, 05:49     Первая раздельная компиляция. Подскажите ошибки. #2
А само задание можно?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.10.2011, 06:05     Первая раздельная компиляция. Подскажите ошибки. #3
Цитата Сообщение от KeyGen
C++
1
2
const int Len =40;
const int Size =3;
эти определения должны быть в единице трансляции, а не в заголовочном файле

Цитата Сообщение от KeyGen
C++
1
extern golf *ch;
как раз такие объявления и надо писать в заголовочный файл

у тебя везде включается <iostream>
он уже есть в заголовочном файле

внутри структуры можно использовать string

ещё можно в заголовочном файле написать ворота, предохраняющие от повторного включения
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
11.10.2011, 20:52  [ТС]     Первая раздельная компиляция. Подскажите ошибки. #4
Вот задание:
Миниатюры
Первая раздельная компиляция. Подскажите ошибки.  
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.10.2011, 02:30     Первая раздельная компиляция. Подскажите ошибки. #5
Цитата Сообщение от accept
эти определения должны быть в единице трансляции, а не в заголовочном файле
можно переделать в enum

C++
1
2
3
4
enum {
    Len = 40,
    Size = 3
};
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.10.2011, 08:03     Первая раздельная компиляция. Подскажите ошибки. #6
Во первых, используй #pragma once или аналог в хэдэре.
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
27.08.2012, 13:23     Первая раздельная компиляция. Подскажите ошибки. #7
Та же задача но почти год спустя - я ее написал но у меня есть некоторые вопросы.
golf.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
#include <iostream>
#include <string>
 
#ifndef golf_h
#define golf_h
 
using namespace std;   //???
 
struct golf
{
string g_str_name; 
int g_i_points;
};
 
void set_golf(golf &,const string, int);
 
int set_golf(golf &);
 
void set_golf_points(golf &);
 
void show_golf(const golf &);
 
#endif
1.using namespace std; //без этого не работает string в struct golf g_str_name, но я читал что в заголовочный файл лучше не включать это пр-во имен так как ...? тогда как сделать "видимыми" строки в структуре
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
27.08.2012, 13:33     Первая раздельная компиляция. Подскажите ошибки. #8
Цитата Сообщение от Aliru777 Посмотреть сообщение
using namespace std;
Никогда так не делайте в заголовочных файлах.
По поводу string:
или
C++
1
2
3
...
std::string g_str_name;
...
или
C++
1
2
3
4
5
6
7
8
...
#ifndef golf_h
#define golf_h
 
using std::string;
 
struct golf
...
Добавлено через 49 секунд
Предпочтителен первый вариант.
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
27.08.2012, 13:51     Первая раздельная компиляция. Подскажите ошибки. #9
Цитата Сообщение от Toshkarik Посмотреть сообщение
Никогда так не делайте в заголовочных файлах.
Я об этом читал правда до конца так и не понял почему - включил в заголовочный файл так как строка не работала.

Цитата Сообщение от Toshkarik Посмотреть сообщение
using namespace std;
подключает стандартные ф-ии в глоьальное пр-во имен и мои фу-ии могут перегружать стандартные и => ошибки?В этом проблема подключения?

Первый вариант не заработал - не видит он строки
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
27.08.2012, 15:20     Первая раздельная компиляция. Подскажите ошибки. #10
Ну так правильно, у Вас не подключен файл с классом string.
C++
1
#include <string>
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
27.08.2012, 18:58     Первая раздельная компиляция. Подскажите ошибки. #11
Подключена - но все равно выдает ошибки
У меня в сообщении она первая вверху стоит
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
27.08.2012, 19:09     Первая раздельная компиляция. Подскажите ошибки. #12
Вы хоть напишите, какую ошибку. Вот здесь например все нормально работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2012, 19:21     Первая раздельная компиляция. Подскажите ошибки.
Еще ссылки по теме:

C++ Раздельная компиляция
Создание классов в С++. Раздельная компиляция C++
Раздельная компиляция C++

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

Или воспользуйтесь поиском по форуму:
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
27.08.2012, 19:21     Первая раздельная компиляция. Подскажите ошибки. #13
Спасибо, я в одном месте только подключил - теперь понял.
Yandex
Объявления
27.08.2012, 19:21     Первая раздельная компиляция. Подскажите ошибки.
Ответ Создать тему
Опции темы

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