Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка >>, Поясните, что не нравится компилятору??? 
:(
    Опции темы
VAZik
Дата 19.8.2005, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 19.8.2005

Репутация: нет
Всего: нет



Следующая строка задана в описании класса verylong:

friend istream& operator >> (istream& in, verylong& num);

На что компилятор говорит, что дружественными могут быть только функции или классы. НО подобную конструкцию я встречал в другом исходнике и там она работала. Могу выложить полный код класса. Помогите перегрузить >>.
PM MAIL   Вверх
Mayk
Дата 19.8.2005, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



А что за компилятор?

зы. у меня работает, только что проверил.

Добавлено @ 08:09
Кстати, а если ругается типа того
Цитата

`istream' is neither function nor member function; cannot be declared
  friend

то проверь подключены ли iostream. Мало ли.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
VAZik
Дата 19.8.2005, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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);
}

Полная версия класса. Попробуй с ней... может где-то в ней глюк...
PM MAIL   Вверх
Mayk
Дата 19.8.2005, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Гхм, насколько мне известно BB6 не такой уж и старый компилятор - в нём неймспейсы есть.
Добавь после инклюдов using namespace std;

Кстати на нашем форуме есть замечательная подсветка синтаксиса:
Код

#include <iostream> //было
#include <stdlib> //было
#include <cstring> //было
using namespace std;  //вот это вот добавь





--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
VAZik
Дата 19.8.2005, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 19.8.2005

Репутация: нет
Всего: нет



Без namespace все отлично работало, пока не стал >> перегружать. Я этот файл подключаю к основной программе.
PM MAIL   Вверх
Mayk
Дата 19.8.2005, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(VAZik @ 19.8.2005, 12:39)
Без namespace все отлично работало, пока не стал >> перегружать

А что, iostream используется в исходнике где-либо еще помимо >>? Нет? То-то и оно.

Может стоит в начале проверить? Я вот не поленился, хотя для того чтоб загрузить билдер, мне пришлось ребутить тачку smile




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
VAZik
Дата 19.8.2005, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 19.8.2005

Репутация: нет
Всего: нет



Просто у меня он только устанавливается...
PM MAIL   Вверх
VAZik
Дата 19.8.2005, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 19.8.2005

Репутация: нет
Всего: нет



Пасибки!!! Все заработало!
Объясни, пожалуйста, почему был затуп. А то я так ни фига и не понял...
PM MAIL   Вверх
Mayk
Дата 19.8.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(VAZik @ 19.8.2005, 13:30)
Объясни, пожалуйста, почему был затуп. А то я так ни фига и не понял...

В с++ есть такая фича, как пространство имён(namespace). Идентификаторы(читать имена переменных, имена классов, тп) с одинаковыми именами, но принадлежащие разным пространством имён считаются разными идентификаторами. Если не все, то большинство типов и переменных из станадртной плюсной библиотеки лежат в std. Соответственно, когда ты используешь istream, компилятор пробует найти его в глобальном пространстве имён. Но не находит и вылетает с ошибкой. Если стоит using namespace std;, то поиск будет происходить не только в глобальном, но в std.
Для того, чтобы получить доступ к идентификатору определенного пространства, используется конструкция вида
имя-пространства::идентификатор, например std::cout. Пространства могут содержать в себе другие пространства имён.
Глобальное пространство обозначается ::.
Так, например, можно объявить цвета:
Код

namespace Colors
{
    namespace Light{
        const int red=0xFF0000;
        const int green=0x00FF00;
        const int blue=0x0000FF;
   }
    namespace Dark{
        const int red=0x1F0000;
        const int green=0x001F00;
        const int blue=0x00001F;
   }
}

Для того,чтоб получить ярко-красный цвет, можно использовать
Код

int red = Colors::Light::Red; //взять Red из пространства Light пространства Colors

Или даже
Код

int red = ::Colors::Light::Red; //взять Red из пространства Light пространства Colors, Colors находится в глобальном пространстве имён

В первом случае Colors не обязательно принадлежит глобальному пространству. Он может содержаться в каком-нибудь используемом(using).

Можно провести аналогию с запуском exe'шников. Глобальным пространством в этом случае является корневая папка(она же текущая), PATH задает "пространства имён", где может искать файлы, сами пространства имён суть каталоги, а файлы суть идентификаторы.
Так если екзежник находится в текущем каталоге (из исполняемых файлов там иногда autoexec.bat есть), то его можно запустить через autoexec.bat, \autoexec.bat. Если хочется запустить блокнот, то его можно запустить следующими способами:
windows\notepad,
\windows\notepad,
set path=windows; notepad
set path=\windows; notepad

Ну это вообще в книгах по с++ можешь поискать.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Hroft
Дата 19.8.2005, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



Mayk
Класс! +
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.