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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2013, 09:59   #1
Antej
Пользователь
 
Регистрация: 09.01.2012
Сообщений: 38
По умолчанию дружественность классов из разных пространств имен

есть 2 пространства имен описанные примерно следующим образом
Код:
namespace Arithmetics
{
/*некоторый код*/

    namespace Math
    {
         /*некоторый код*/
    }
}
в коде есть хедер следующего содержания
Код:
#include <string>
#include <map>
#include "BinaryOperator.h"
#include "../Parser.h"

namespace Arithmetics
{
    namespace Math
    {
        using std::map;
        using std::multimap;
        using std::string;
        class BinaryOperatorList
        {
            friend class Arithmetics::Parser;
        public:
            static BinaryOperatorList* instance();
            void addOperator(string name, BinaryOperator oper, short prior = 2);
            BinaryOperator getOperator(string &name)const;
            bool isNameFree(string& name);
            ~BinaryOperatorList(){}
        private:
            BinaryOperatorList();
            void registerBinaryOperator();
            static BinaryOperatorList* _instance;
            map<string, BinaryOperator> _dictionary;
            multimap<short, string> _priority;
        };
    }
}
во время компиляции я получаю следующее сообщение g++:
../Arithmetics/./math/BinaryOperatorList.h:19:39: error: 'Parser' in namespace 'Arithmetics' does not name a type
../Arithmetics/./math/BinaryOperatorList.h:19:13: error: friend declaration does not name a class or function
при етом парсер - это класс...
вопрос - что я делаю не так?
Antej вне форума Ответить с цитированием
Старый 18.09.2013, 11:28   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
Arithmetics::Parser
А где же этот класс Parser объявлен в пространстве имен Arithmetics?
Вы же указываете компилятору искать идентификатор Parser в пространсте имен Arithemtics?

Исправил (утром писал - видимо спутал названия )

Последний раз редактировалось Igor95; 18.09.2013 в 19:28.
Igor95 вне форума Ответить с цитированием
Старый 18.09.2013, 11:34   #3
Antej
Пользователь
 
Регистрация: 09.01.2012
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Код:
Arithmetics::Parser
А где же этот класс Parser объявлен в пространстве имен Arithmetics?
Вы же указываете компилятору искать идентификатор в пространсте имен Parser
возможно я не верно Вас понял, но вот в этом хедере, включенном в предидущий.
Код:
#include <string>
#include <list>
#include "ArithmeticsMath.h"
using namespace Arithmetics::Math;

namespace Arithmetics
{
	std::string cleanSpaces(std::string& source);

	class Parser
	{
	public:
		void parse();
		std::list<string> operator()(std::list<std::string> &document);
	private:
		bool isNameFree(string &name);
		std::list<std::string> _document;
		std::list<std::string> _result;
		std::string cleanBuckets(std::string str);
		bool isOperatorInBuckets(std::string& rjadok, int pos);
		bool checkBuckets(std::string& expression);
		void variableGenerator(std::string varPart);
		void functionGenerator(std::string funcPart);
		Range* rangeVariableGenerator(std::string varPart);
		AbstractExpressionNode* expressionGenerator(std::string expr);
	};

	class ParserException : public ArithmeticException
	{
	public:
		ParserException(std::string text);
		~ParserException();
	private:
		inline void setText(std::string text);
	};
}

Последний раз редактировалось Antej; 18.09.2013 в 11:38.
Antej вне форума Ответить с цитированием
Старый 19.09.2013, 19:59   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
 friend class ::Arithmetics::Parser;
_Bers вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методы расширения, проблема из за разных пространств имен mike_tihomirov C# (си шарп) 2 25.06.2012 15:52
не работает дружественность классов monnzz Общие вопросы C/C++ 9 02.06.2012 16:00
Объекты разных классов в динамическом списке pifpafx Общие вопросы C/C++ 14 27.10.2011 22:55
Шаблоны и дружественность MasterSporta Общие вопросы C/C++ 5 29.05.2011 14:52