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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2013, 02:25   #1
Николайка
Пользователь
 
Аватар для Николайка
 
Регистрация: 26.11.2009
Сообщений: 13
По умолчанию с++ friend

где то ошибка не могу найти её, не компилируется.
Код:
#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 << "Название: " << title << endl; 
   cout << "Автор: " << author << endl; 
   cout << "Каталог: " << 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( "Учимся программировать на языке C++", "Jamsa", "P101"); 
   librarian library; 
   programming.show_book(); 
   library.change_catalog(&programming, "Легкий C++ 101"); 
   programming.show_book(); 
_getche();
}

программа передает объект book в функцию change_catalog класса librarian по адресу. Поскольку эта функция изменяет элемент класса book, программа должна передать параметр по адресу, а затем использовать указатель для обращения к элементу этого класса.

Последний раз редактировалось Stilet; 18.11.2013 в 11:55.
Николайка вне форума Ответить с цитированием
Старый 18.11.2013, 06:19   #2
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Фраза "не компилируется" для экстрасенсов? Не думаю, что здесь такие есть. Почему не компилируется хоть напиши.
Используй предварительное описание класса librarian, т.к. класс book ничего не знает о том что это за друг такой.
И раз уж используешь C++, лучше пользуйся классом string, намного удобнее.
nikmoon вне форума Ответить с цитированием
Старый 18.11.2013, 10:19   #3
Flay
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 26
По умолчанию

Хм. Надо бы привести сами ошибки компилятора для начала.
А так:
Класс book указывает на связь с классом friend, но если размещать все в одном файле, то класс book не знает, что существует класс friend, т.к. он должен быть объявлен заранее. Не забываем, что компилируется код построчно. Учитывая, что класс friend использует класс book его нельзя перенести "наверх". Остается объявить класс friend перед классом book, но сам класс разместить после, т.е.:
Код:
class librarian;

class book { 
...
};
...
class librarian
...
Flay вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
friend в шаблоне Blind Guard Общие вопросы C/C++ 3 17.12.2012 23:31
friend template Dmitry333 Общие вопросы C/C++ 1 05.10.2012 10:58
friend function (c++) zhenya.ya Помощь студентам 6 01.10.2010 10:04
friend функция в clr Lazio Общие вопросы C/C++ 5 27.02.2010 23:13