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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2011, 09:30   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию Visual Studio строки

Доброго всем времени, не мог ли бы мне сказать, в чем я "ДЕБИЛ", в общем пытаюсь вернуть путь до элемента, при проходе по дереву, но на такое выражение он у меня ругается: Path+"->Left"; например, т.е. говорит что у класса строки нет как бы выражения +. Что тогда сделать?
CodeNOT вне форума Ответить с цитированием
Старый 24.02.2011, 12:58   #2
Ru_DoLF
Ubuntu 10.04
Пользователь
 
Аватар для Ru_DoLF
 
Регистрация: 15.07.2010
Сообщений: 51
По умолчанию

Код и лог компилятора в студию!
Язык образует среду мышления и формирует представление о том, о чем мы думаем (Б. Л. Уорф)
Ru_DoLF вне форума Ответить с цитированием
Старый 24.02.2011, 16:25   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Код:
	Tree* SearchTree(Tree *Root,int SearchElem,string Path)
	{
		if(Root==NULL)
		{
			return NULL;
		}else
		{
			if(Root->Key=SearchElem)
			{
				cout<<"\n Element found! ";
				cout<<"\n Path: "<<Path.c_str();
				return Root;
			}else
			{
				if(Root->Key<SearchElem)
				{
					SearchTree(Root->Right,SearchElem,Path+"->Right");
				}
				if(Root->Key>SearchElem)
				{
					SearchTree(Root->Left,SearchElem,Path+"->Left");
				}
			}
		}
	}
Сама ошибка: бинарный "+": "std::string" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
CodeNOT вне форума Ответить с цитированием
Старый 24.02.2011, 18:35   #4
-LeV-
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 29
По умолчанию

вроде есть функция strcat называется
-LeV- вне форума Ответить с цитированием
Старый 24.02.2011, 18:52   #5
optimator
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 92
По умолчанию

Еще можно
Код:
Path.append("->Right");
optimator вне форума Ответить с цитированием
Старый 24.02.2011, 20:28   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
cout<<"\n Path: "<<Path.c_str();
лишняя работа же... и лишний код.
и вот тут не косяк ли?
Цитата:
if(Root->Key=SearchElem)
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 24.02.2011, 21:13   #7
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

ой, косяк, извините, с спасибо за ответ)! пс: Извините за быдлокод, но я исправлюсь)!
CodeNOT вне форума Ответить с цитированием
Старый 24.02.2011, 21:43   #8
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Тогда заодно именуй всё так:
MyClass — классы
myFunction() — функции, в т.ч. методы
my_variable — локальные переменные, в т.ч. аргументы
m_my_variable — поля классов (то есть так же, как и локальные переменные, только начиная с "m_")

И не делай открытые поля, то есть вот такой фигни быть не должно: Root->Key. Надо делать приватное поле m_key, геттер key() (если он нужен) и сеттер setKey() (если он нужен).

И просто полюбопытствую... Root->Left,SearchElem,Path — это что? Запятую перегрузил?

И насчёт переносов строк и пробелов. Правда лучше выглядит?
Код:
	Tree *SearchTree(Tree *Root, int SearchElem, string Path)
	{
		if(Root == NULL) {
			return NULL;
		} else {
			if(Root->Key == SearchElem) {
				cout << "\n Element found!";
				cout << "\n Path: " << Path;
				return Root;
			} else {
				if(Root->Key < SearchElem) {
					SearchTree(Root->Right, SearchElem, Path + "->Right");
				}
				if(Root->Key > SearchElem) {
					SearchTree(Root->Left, SearchElem, Path + "->Left");
				}
			}
		}
	}
То есть хорошей идеей является пристыковывать "{" ко всему, кроме описаний классов и функций и пристыковывать else к "}". А также обивать пробелами почти все операторы (+, -, <, ==, = и т.п.) с обоих сторон и к запятым слева.

Также, * в указателях и & в ссылках лучше пристыковывать к названию. То есть T *myFunc(), а не T* myFunc().

Да и, по хорошему, лучше перенос вывода делать не в начале, а в конце:
Код:
cout << "Element found!\n";
cout << "Path: " << Path << "\n";
Но, вообще сказать, хотя бы иногдя используй endl. А именно тогда, когда может понадобиться flush-ить поток (в случае cout — после каждого куска текста, который юзеру надо видеть за раз).
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 24.02.2011 в 22:11.
Obey-Kun вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Expression Studio и Visual Studio 2010 ждать ли русские версии? Casper-SC Свободное общение 31 25.05.2010 14:31
Проблема с windows visual styles в Visual studio 2008 express. [awa Visual C++ 2 09.01.2010 06:05
Visual Studio Standard 2008 против Visual Studio Express 2008. Стоит ли покупать? Casper-SC Софт 4 31.12.2009 11:46
VISUAL STUDIO 2008 defaul language - как переключить в VISUAL STUDIO 2008 язык программирования, использ Эйнж Общие вопросы C/C++ 0 27.12.2009 20:39
Добавление строки в базу данных из visual studio Жендопыр Помощь студентам 0 24.07.2009 02:32