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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2014, 13:21   #1
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию Вопрос по STL. template <class Iterator>

Не стал мучиться с k-means, нашел готовое решение, но в консольном варианте.
В консоли, работает нормально. Решил создать класс Clasters. Поместил туда все функции. Все они нормально скомпилились кроме одной:
Код:
template <class Iterator> vector<list <typename Iterator::value_type> > MClasters::Cluster(const Iterator begin, const Iterator end, int M);
Компиль выдаёт ошибки:
[C++ Error] Clasters.h(36): E2303 Type name expected
[C++ Error] Clasters.h(36): E2139 Declaration missing ;
[C++ Fatal Error] CLACTERS.CPP(151): F1004 Internal compiler error at 0x128a12c with base 0x1200000
Курсор указывает на list.
Библиотеки vector и list подключены. Ума не приложу в чём ошибка.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 04.06.2014 в 13:23.
Smitt&Wesson вне форума Ответить с цитированием
Старый 04.06.2014, 14:20   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

std::vector, std::list?
Somebody вне форума Ответить с цитированием
Старый 04.06.2014, 15:01   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
std::vector, std::list?
Спасибо. Первые две ошибки пропали. Осталась:
[C++ Fatal Error] CLACTERS.CPP(151): F1004 Internal compiler error at 0x128a12c with base 0x1200000
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 04.06.2014, 18:23   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Код:
typename std::iterator_traits<Iterator>::value_type
?
FataLL вне форума Ответить с цитированием
Старый 04.06.2014, 18:57   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Не-а. Не помогло. Ошибка так и вылазит.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 04.06.2014, 23:33   #6
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Пардон, не понял. А что там на 151-й строке сипипишника?
FataLL вне форума Ответить с цитированием
Старый 04.06.2014, 23:46   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вот две функции. Вот эта, подключается нормально
Код:
template <class Iterator> 
	  Iterator::value_type MClasters::Centroid(const Iterator begin, const Iterator end)
{

	  //	double minDist = numeric_limits<double>::max();
	  double MinDist = 5000;

	  Iterator::value_type Element;
  
	  for(Iterator current = begin; current != end; current++){
		  double Dist = 0;

		  for(Iterator c = begin; c != end; c++)
			  Dist += Distance(*current, *c);

		  if(Dist < MinDist) {
			  MinDist = Dist; 
			  Element = *current;
		  }
	  }
	  return Element;
  }
А вот эта, выдаёт ошибки

Код:
template <class Iterator> 
std::vector<std::list <typename Iterator::value_type> > MClaters::Cluster(const Iterator begin, const Iterator end, int M)
{

       // создать М кластеров
	vector<list<Iterator::value_type> > Clusters(M);

      // приписать каждый элемент коллекции (объект) случайному кластеру
      //точнее заполнить кластера случайными значениями
     for(Iterator c = begin; c != end; c++)
		Clusters[rand_0toN1(M)].push_back(*c);

	 //массив цетнроидов
      vector<Iterator::value_type> Centroids(M);
	  bool modified;

	do{
		//заполним массив центроидов данными (собственно в каждом элементе
		// массива центроидов будет одно значение)
		for(int z = 0; z<M;z++)
                      {
			Centroids[z] = Centroid(Clusters[z].begin(), Clusters[z].end());
		}


		modified = false;
		vector<list<Iterator::value_type> > NewClusters(M);

		for(int OldCl = 0; OldCl < M; OldCl++){//for1
			for(Iterator c =Clusters[OldCl].begin(); c!= Clusters[OldCl].end(); c++){//for2
				double MinDist = 50000;
				int ClusterNo;

				for(int centroid = 0; centroid < M; centroid++){//for3
					double Dist = Distance(*c, Centroids[centroid]);

					if(Dist < MinDist){
						MinDist = Dist; 
						ClusterNo = centroid;
					}//if
				}//for3

				if(ClusterNo != OldCl) modified = true;

				NewClusters[ClusterNo].push_back(*c);
			}//for2
		}//for1
			Clusters = NewClusters;

	}//do
	while(modified);

	return Clusters;
}
Причём в объявлении функции. Я пробовал закомментировать весь внутренний код, эффект тот-же.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 04.06.2014 в 23:52.
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.06.2014, 09:58   #8
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Перед описанием функции поставил
Код:
using namespace std;
Соответственно, из самого описания std:: убрал. Скомпилировалось...
FataLL вне форума Ответить с цитированием
Старый 05.06.2014, 10:03   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Какой минимальный неработающий код?
Код:
#include <list>
#include <vector>

template <class Iterator>
std::vector<std::list <typename Iterator::value_type> > foo(
	const Iterator, const Iterator, int)
{

}
замечательно компилируется.
Somebody вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
template-template partial specialization (шаблон шаблона) looooser Общие вопросы C/C++ 2 29.07.2013 23:59
Простой вопрос STL AnKor94 Общие вопросы C/C++ 6 03.04.2013 12:44
Класс vector и сложносоставные массивы. вопрос к спецам в STL haruhi Общие вопросы C/C++ 1 19.11.2011 16:32
помогите template<class> (Шаблоны и указатели) breate Общие вопросы C/C++ 3 23.10.2009 23:17
Вопрос о функциональном объекте less в stl Познающий Помощь студентам 0 01.06.2009 11:14