Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2014, 22:19   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию дружественные классы

Подправьте код, чтобы норм компилировался, просто у меня старый источник примеров по C++

Код:
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;

class book
{
public:
    book (char*, char*, char*);
    void show_book(void);
    friend librarian;
private:
    char title[64] ;
    char author[64];
    char catalog[64];
};


book::book(char* title, char* author, char* catalog)
{
    strcpy(book::title, title);
    strcpy(book::author, author) ;
    strcpy(book::catalog, catalog);
}

    
void book::show_book(void){
    cout << "Nazvanie: " << title << endl;
    cout << "Autor: " << author << endl;
    cout << "Catalog: " << catalog << endl;
}

    
class librarian{
public:
    void change_catalog(book*, char*);
    char* get_catalog(book);
};

   
void librarian::change_catalog(book* this_book, char* new_catalog){
    strcpy(this_book->catalog, new_catalog);
}

   
char* librarian::get_catalog(book this_book){
    static char catalog[64];
    strcpy(catalog, this_book.catalog);
    return(catalog) ;
}



void main(void){
    book programming( "U4ims9 programmirovat' na C++", "Jamsa", "P101");
    librarian library;
    programming.show_book();
    library.change_catalog(&programming, "Legkiy C++ 101");
    programming.show_book();

    char ch = getchar()
}
zla9_kolu4ka вне форума Ответить с цитированием
Старый 27.02.2014, 22:29   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Простите, а требуемый компилятор C++ нужно угадывать?
Простите меня ещё раз, но название темы очень странное.
Streletz вне форума Ответить с цитированием
Старый 27.02.2014, 22:32   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

1) Уберите лишний хеадер, если потребуется
2) Добавьте предварительное объявление класса
3) main должен возвращать int
4) потеряна точка с запятой в самом конце программы
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.02.2014, 22:36   #4
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
Простите, а требуемый компилятор C++ нужно угадывать?
Простите меня ещё раз, но название темы очень странное
классы друзья, что непонятного, в C++ других друзей вроде больше нет
Не знаю какой там компилятор, в Visual Studio 2010

Ошибки:
1>------ Построение начато: проект: Проект1, Конфигурация: Debug Win32 ------
1> Исходный код.cpp
1>h:\программирование\сохранения\го лубь\классы\друзья\проект1\проект1\ исходный код.cpp(11): error C2433: librarian: "friend" не разрешается для объявлений данных
1>h:\программирование\сохранения\го лубь\классы\друзья\проект1\проект1\ исходный код.cpp(11): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>h:\программирование\сохранения\го лубь\классы\друзья\проект1\проект1\ исходный код.cpp(42): error C2248: book::catalog: невозможно обратиться к private член, объявленному в классе "book"
1> h:\программирование\сохранения\голу бь\классы\друзья\проект1\проект1\ис ходный код.cpp(15): см. объявление "book::catalog"
1> h:\программирование\сохранения\голу бь\классы\друзья\проект1\проект1\ис ходный код.cpp(7): см. объявление "book"
1>h:\программирование\сохранения\го лубь\классы\друзья\проект1\проект1\ исходный код.cpp(48): error C2248: book::catalog: невозможно обратиться к private член, объявленному в классе "book"
1> h:\программирование\сохранения\голу бь\классы\друзья\проект1\проект1\ис ходный код.cpp(15): см. объявление "book::catalog"
1> h:\программирование\сохранения\голу бь\классы\друзья\проект1\проект1\ис ходный код.cpp(7): см. объявление "book"
1>h:\программирование\сохранения\го лубь\классы\друзья\проект1\проект1\ исходный код.cpp(56): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "library"
1>h:\программирование\сохранения\го лубь\классы\друзья\проект1\проект1\ исходный код.cpp(56): error C2065: library: необъявленный идентификатор
1>h:\программирование\сохранения\го лубь\классы\друзья\проект1\проект1\ исходный код.cpp(58): error C2065: library: необъявленный идентификатор
1>h:\программирование\сохранения\го лубь\классы\друзья\проект1\проект1\ исходный код.cpp(58): error C2228: выражение слева от ".change_catalog" должно представлять класс, структуру или объединение
1> тип: 'unknown-type'
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Последний раз редактировалось zla9_kolu4ka; 27.02.2014 в 22:40.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 27.02.2014, 22:45   #5
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

Код:
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
class book
{
public:
	friend class librarian;
    book (char*, char*, char*);
    void show_book(void);
private:
    char title[64] ;
    char author[64];
    char catalog[64];
};
book::book(char* title, char* author, char* catalog)
{
    strcpy(book::title, title);
    strcpy(book::author, author) ;
    strcpy(book::catalog, catalog);
}

    
void book::show_book(void){
    cout << "Nazvanie: " << title << endl;
    cout << "Autor: " << author << endl;
    cout << "Catalog: " << catalog << endl;
}

    
class librarian{
public:
    void change_catalog(book*, char*);
    char* get_catalog(book);
};

   
void librarian::change_catalog(book* this_book, char* new_catalog){
    strcpy(this_book->catalog, new_catalog);
}

   
char* librarian::get_catalog(book this_book){
    static char catalog[64];
    strcpy(catalog, this_book.catalog);
    return(catalog) ;
}



void main(void)
{
    book programming( "U4ims9 programmirovat' na C++", "Jamsa", "P101");
    librarian library;
    programming.show_book();
    library.change_catalog(&programming, "Legkiy C++ 101");
    programming.show_book();

    char ch = getchar();
}
alekopoko вне форума Ответить с цитированием
Старый 27.02.2014, 22:48   #6
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

alekopoko, красава, меньше вопросов, больше дела
zla9_kolu4ka вне форума Ответить с цитированием
Старый 27.02.2014, 23:19   #7
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
классы друзья, что непонятного, в C++ других друзей вроде больше нет
Вообще-то всегда были дружественные классы.
Streletz вне форума Ответить с цитированием
Старый 28.02.2014, 07:29   #8
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Вообще-то всегда были дружественные классы.
Это кому как . Для кого-то они друзья....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 28.02.2014, 07:36   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Это кому как . Для кого-то они друзья....
Весело! Где Вы в этом коде друзей нашли? Обычные классы и даже сами-себе обособленные.
Код:
class fig_zaet{} drug {};
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 28.02.2014 в 07:40.
Smitt&Wesson вне форума Ответить с цитированием
Старый 28.02.2014, 07:43   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
alekopoko, красава, меньше вопросов, больше дела
Вопросы были хорошие. Компилятор надо указывать. Например на "исправленном коде" gcc сыпет ошибками и ворнингами:
Цитата:
main.cpp:3:19: fatal error: conio.h: Нет такого файла или каталога
main.cpp:52:15: error: ‘::main’ must return ‘int’
main.cpp: In function ‘int main()’:
main.cpp:54:71: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp:54:71: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp:54:71: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp:57:58: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp:60:23: error: ‘getchar’ was not declared in this scope
Я думаю, что icc (от интела) сыпанет что-то другое, а icc (от IBM) - третье, не говоря уже о всяких борландах
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дружественные классы эллипс и круг dkii Общие вопросы C/C++ 21 04.03.2014 08:50
C++: Классы, перегрузка операторов, дружественные функции. Lingri Помощь студентам 6 20.09.2013 21:22
Дружественные классы и protected Stiker Помощь студентам 1 10.01.2013 00:57
Дружественные функции и классы Opiym Помощь студентам 1 05.04.2010 21:51