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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дружественные функции, Область видимости 
V
    Опции темы
Sapfeer
Дата 19.1.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый вечер! У меня возникли проблемы в решении одной задачи...

Необходимо в дружественной функции определить два указателя на структуру, которая описана в классе

Код


#ifndef STRINGLIST_H
#define STRINGLIST_H

#include <vcl.h>
#include <string>
#include <iostream>
#include <conio>

using namespace std;

class StringList
{
  struct ListItem
  {

    int key;
    string str;

    ListItem *next;

    ListItem(string str_tmp, ListItem *n=NULL)
    {
      key = key==0 ? key : key++;
      str=str_tmp;
      next=n;
    }

    ListItem &operator=(ListItem *item_tmp)
    {
      key=item_tmp->key;
      str=item_tmp->str;
      next=item_tmp->next;
    }
    
    int Get_Key() {return key;}
  };

  int count;

  ListItem *First;
  ListItem *Last;

  public:

    StringList() {count=0; First=Last=NULL;}

    ~StringList();

    int Get_Count() {return count;}

    void AddLast(string str_tmp);

    void Sort();

    string operator[](int i);
    
    friend const char *Compare(StringList list_one, StringList list_two);

};

#endif



таким образом

Код


const char *Compare(StringList *list_one, StringList *list_two)
{
  bool check=true;

  StringList::ListItem *cur_one=list_one->First, *cur_two;

  if(list_one->count!=list_two->count) return "Lists Is Not Equals";

  if(list_one->First)
  {
    if(list_two->First)
    {
      while(cur_one)
      {
        cur_two=list_two->First;
        while(cur_two)
        {
          if((cur_one->key!=cur_two->key)||(cur_one->str!=cur_two->str))
            check=false;
          cur_two=cur_two->next;
        }
        cur_one=cur_one->next;
      }
    }
    else return "Second list is empty.";
  }
  else return "First list is empty.";

  if(check) return "Lists is equals.";
  else return "Lists is not equals.";



Вроде бы ничего сложного...

Но компилятор ее в упор не видит!!! Выдает кучу ошибок о невидимости данного типа...
PM MAIL   Вверх
Fazil6
Дата 19.1.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



у тебя в классе friend функция имеет сигнатуру другую.
Звездочки вставь
Код

 friend const char *Compare(StringList * list_one, StringList * list_two);


Это сообщение отредактировал(а) Fazil6 - 19.1.2007, 18:09
PM MAIL   Вверх
Sapfeer
Дата 19.1.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Fazil6 @ 19.1.2007,  18:08)
у тебя в классе friend функция имеет сигнатуру другую.
Звездочки вставь
Код

 friend const char *Compare(StringList * list_one, StringList * list_two);

Хм, недоглядел... smile  Спасибо большое! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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