![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| VAZik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 19.8.2005 Репутация: нет Всего: нет |
Следующая строка задана в описании класса verylong:
friend istream& operator >> (istream& in, verylong& num); На что компилятор говорит, что дружественными могут быть только функции или классы. НО подобную конструкцию я встречал в другом исходнике и там она работала. Могу выложить полный код класса. Помогите перегрузить >>. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
А что за компилятор?
зы. у меня работает, только что проверил. Добавлено @ 08:09 Кстати, а если ругается типа того
то проверь подключены ли iostream. Мало ли. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| VAZik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 19.8.2005 Репутация: нет Всего: нет |
Borland C++ Builder 6.0.
#include <iostream> #include <stdlib> #include <cstring> ////////////////////////////////////// class verylong { protected: char number [1024]; bool one; public: verylong () : one (false) { for (int i = 0; i < 1024; i++) number[i] = 0; } friend istream& operator >> (istream& in, verylong& num); verylong& operator* (int& a); verylong& operator= (int& a); char* display(); }; //------------------------------------ istream& operator >> (istream& in, verylong& num) { in >> number; strrev(number); return in; } //------------------------------------ verylong& verylong::operator* (int& a) { int length = strlen(number); for(int j = 0; j < length; j++) { int digit = number[j] - '0'; digit *= a; if (one) digit += 1; if (digit >= 10) { one = true; digit -= 10; } else one = false; number[j] = digit + '0'; } if (one) { number[length] = '1'; one = false; return *this; } } //------------------------------------ verylong& verylong::operator= (int& a) { itoa(a, number, 10); strrev(number); return *this; } //------------------------------------ char* verylong::display() { return strrev(number); } Полная версия класса. Попробуй с ней... может где-то в ней глюк... |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Гхм, насколько мне известно BB6 не такой уж и старый компилятор - в нём неймспейсы есть.
Добавь после инклюдов using namespace std; Кстати на нашем форуме есть замечательная подсветка синтаксиса:
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| VAZik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 19.8.2005 Репутация: нет Всего: нет |
Без namespace все отлично работало, пока не стал >> перегружать. Я этот файл подключаю к основной программе.
|
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
А что, iostream используется в исходнике где-либо еще помимо >>? Нет? То-то и оно. Может стоит в начале проверить? Я вот не поленился, хотя для того чтоб загрузить билдер, мне пришлось ребутить тачку -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| VAZik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 19.8.2005 Репутация: нет Всего: нет |
Просто у меня он только устанавливается...
|
|||
|
||||
| VAZik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 19.8.2005 Репутация: нет Всего: нет |
Пасибки!!! Все заработало!
Объясни, пожалуйста, почему был затуп. А то я так ни фига и не понял... |
|||
|
||||
| Mayk |
|
||||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
В с++ есть такая фича, как пространство имён(namespace). Идентификаторы(читать имена переменных, имена классов, тп) с одинаковыми именами, но принадлежащие разным пространством имён считаются разными идентификаторами. Если не все, то большинство типов и переменных из станадртной плюсной библиотеки лежат в std. Соответственно, когда ты используешь istream, компилятор пробует найти его в глобальном пространстве имён. Но не находит и вылетает с ошибкой. Если стоит using namespace std;, то поиск будет происходить не только в глобальном, но в std. Для того, чтобы получить доступ к идентификатору определенного пространства, используется конструкция вида имя-пространства::идентификатор, например std::cout. Пространства могут содержать в себе другие пространства имён. Глобальное пространство обозначается ::. Так, например, можно объявить цвета:
Для того,чтоб получить ярко-красный цвет, можно использовать
Или даже
В первом случае Colors не обязательно принадлежит глобальному пространству. Он может содержаться в каком-нибудь используемом(using). Можно провести аналогию с запуском exe'шников. Глобальным пространством в этом случае является корневая папка(она же текущая), PATH задает "пространства имён", где может искать файлы, сами пространства имён суть каталоги, а файлы суть идентификаторы. Так если екзежник находится в текущем каталоге (из исполняемых файлов там иногда autoexec.bat есть), то его можно запустить через autoexec.bat, \autoexec.bat. Если хочется запустить блокнот, то его можно запустить следующими способами: windows\notepad, \windows\notepad, set path=windows; notepad set path=\windows; notepad Ну это вообще в книгах по с++ можешь поискать. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||||
|
|||||||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Mayk
Класс! + |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |