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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2009, 16:57   #1
Pord
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию как сделать функцию-друга для вложенного класа?

Здравствуйте. Никак не получается создать функцию-друга для вложенного класса не подскажете, где ошибка?

//файл SetProcessing.h
Код:
#pragma once
#include <set>

using namespace std;


class SetProcessing
{
	private:
		class Element
		{
			private:
				friend class SetProcessing;
				set<Element> underSet;
				string setElement;
			public:
				Element(string data){setElement=data;}
				Element(set<Element> data){underSet=data;}
				bool operator<(const Element &b) const
				{
					return underSet.empty()?
						(setElement.compare(b.setElement)<0):
						(underSet.size()<b.underSet.size());
				}
				friend ostream& operator<<(ostream& t, const Element &r);
		};
		set<Element> GetSet(string inputData);
		set<Element> inputSet;
	public:
		void FillIn(string inputData);
};
//файл SetProcessing.cpp
Код:
#include "StdAfx.h"
#include "SetProcessing.h"
#include <iostream>
#include <conio.h>
using namespace std;

ostream& operator<<(ostream& t, const SetProcessing::Element &r)
{
          t<<r.setElement;
}


set<SetProcessing::Element> SetProcessing::GetSet(string inputData)
{
	set<Element> tempSet;
	for (unsigned int i=0;i<inputData.length();i++)
	{
		string temp;
		if ((inputData[i]!='{') && (inputData[i]!='<'))
		{
			do
			{
				temp+=inputData[i];
				i++;
			}while ((i<inputData.length())&&(inputData[i]!=','));
			tempSet.insert(temp);
		}
		else
		{
			if (inputData[i]!='{') 
			{
				do
				{
					temp+=inputData[i];
					i++;
				}while ((i<inputData.length())&&(inputData[i]!='}'));
				tempSet.insert(GetSet(temp));
			}
			if (inputData[i]!='<') 
			{
				do
				{
					temp+=inputData[i];
					i++;
				}while ((i<inputData.length())&&(inputData[i]!='>'));
				tempSet.insert(GetSet(temp));
			}
		}
	}
	return tempSet;
}

void SetProcessing::FillIn(string inputData)
{
	//тут добавляем проверку
	inputSet=GetSet(inputData.substr(1,inputData.length()-2));
	set<Element>::iterator i;
//	for(i=inputSet.begin();i!=inputSet.end();i++)
	cout<<*i;
	getchar();
}
VS выдает:error C2248: 'SetProcessing::Element' : cannot access private class declared in class 'SetProcessing'. Заранее спасибо
Pord вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать бота для онлайн игры? zotox Gamedev - cоздание игр: Unity, OpenGL, DirectX 15 24.09.2009 17:34
Как сделать ехе для программы DiSpalL Помощь студентам 4 31.05.2009 22:21
Как сделать так, что б Float-элементы не уезжали друг под друга (если не влазят в экран) barbiturat HTML и CSS 3 09.12.2008 10:26
Как сделать макрос для ComboBoxa anahronism Microsoft Office Excel 0 28.05.2008 15:40
Как сделать OpenQuery для QueryDef ? дмидми Microsoft Office Access 0 06.03.2008 12:25