Функция шаблон проверки
От: wbear  
Дата: 17.10.23 14:58
Оценка:
Всем Хи!

Старый проект. Среда VC 6.0.
Попытка оптимизации проекта.

Создал шаблоны функций проверки нахождения записи в массиве. Но компилятор ругается что для класса CBlockType не определен оператор ==.

В чем ошибка?


class CBlockType
{
public:
  CBlockType()
  {
  }

  CBlockType(CBlockType const& rht)
  {
  }  

  ~CBlockType(){}

  CBlockType operator = (const CBlockType& rht)
  {
      if(this == &rht)
         return *this;
  }

  friend bool operator == (const CBlockType&, const CBlockType&)
  {
     return 0;
  }
  
};


template <typename T>
int CheckRecord(const std::vector<T>&data, const T& value)
{
   if(std::find(data.begin(), data.end(), value)  == data.end())
     return 0;
   else
     return 1;    
}

void AddRecord(const std::vector<T>&data, const T& value)
{
   
}


typedef std::vector<CBlockType>  BTContein;

void main()
{
  BTContein vecBlockType;
  
  CBlockType bt;


  if(CheckRecord(vecBlockType, bt))    
      AddRecord(vecBlockType, bt);

}
Re: Функция шаблон проверки
От: B0FEE664  
Дата: 17.10.23 15:55
Оценка: +1
Здравствуйте, wbear, Вы писали:

W>Создал шаблоны функций проверки нахождения записи в массиве. Но компилятор ругается что для класса CBlockType не определен оператор ==.

W>В чем ошибка?
Скорее всего забыли добавить
#include <algorithm>
И каждый день — без права на ошибку...
Re: Функция шаблон проверки
От: night beast СССР  
Дата: 17.10.23 18:54
Оценка: +1
Здравствуйте, wbear, Вы писали:

W>Старый проект. Среда VC 6.0.

W>Попытка оптимизации проекта.

не уверен что VC 6.0 понимает ADL

попробуй перегрузку оператора вынести из класса
Отредактировано 17.10.2023 18:58 night beast . Предыдущая версия . Еще …
Отредактировано 17.10.2023 18:55 night beast . Предыдущая версия .
Re: Функция шаблон проверки
От: rg45 СССР  
Дата: 27.10.23 13:44
Оценка:
Здравствуйте, wbear, Вы писали:

W>Старый проект. Среда VC 6.0.

W>Попытка оптимизации проекта.

W>Создал шаблоны функций проверки нахождения записи в массиве. Но компилятор ругается что для класса CBlockType не определен оператор ==.


W>В чем ошибка?


Сказать наверняка затруднительно, поскольку шестую студию найти уже не так-то просто. Скорее всего, причина в несовершенсве компилятора, ведь VC 6.0 серьезно не дотягивал даже до требований стандарта C++03. Из того, что могу вспомнить навскидку: в VC 6.0 не было еще частичной специализации классов; параметры шаблоннов функций не отражались в сигнатурах функций, что иногда вызывало коллизии имен во время линковки и вынуждало заводить фейковые параметры, как обходной маневр. Переменные циклов находились в области видимости внешнего скоупа. Ну и всякое такое. Скорее всего и ADL в VS 6.0 также достаточно примитивен. Можно для начала попробовать добавить объявление оператора сравнения или вообще вынести определение за пределы класса. Как вариант, можно попробовать сделать оператор сравнения членом класса.
--
Отредактировано 27.10.2023 14:15 rg45 . Предыдущая версия . Еще …
Отредактировано 27.10.2023 13:56 rg45 . Предыдущая версия .
Отредактировано 27.10.2023 13:53 rg45 . Предыдущая версия .
Re[2]: Функция шаблон проверки
От: qaz77  
Дата: 27.10.23 14:58
Оценка:
Здравствуйте, rg45, Вы писали:
R>Скорее всего, причина в несовершенсве компилятора, ведь VC 6.0 серьезно не дотягивал даже до требований стандарта C++03.

Он вышел в 98 и недотягивал до стандарта C++98.

С переменными цикла for там была такая фигня, это да, что они попадали во внешний скоуп цикла.
Re[3]: Функция шаблон проверки
От: rg45 СССР  
Дата: 27.10.23 15:02
Оценка:
Здравствуйте, qaz77, Вы писали:

Q>Он вышел в 98 и недотягивал до стандарта C++98.


не-не, в 98-м вышел VS 5.0, это я хорошо помню. VS 6.0, вышел чуть позже — на пару-тройку лет, точно не помню уже, какой это был год.
--
Re[4]: Функция шаблон проверки
От: qaz77  
Дата: 27.10.23 15:06
Оценка:
Здравствуйте, rg45, Вы писали:
R>не-не, в 98-м вышел VS 5.0, это я хорошо помню. VS 6.0, вышел чуть позже — на пару-тройку лет, точно не помню уже, какой это был год.

А вот я как раз прочитал какую-то русскоязычную книжку про C++, где примеры были про VC++ 5.0.
Прихожу на развал дисков у метро, прошу VC 5. Говорят уже есть VC 6, бери его.
Ну я и взял, и понеслось. В 99 уже коммерческий проект на нем пилили... Официальный уже тогда купли, конечно.
Re[5]: Функция шаблон проверки
От: rg45 СССР  
Дата: 27.10.23 15:11
Оценка: -1
Здравствуйте, qaz77, Вы писали:

Q>А вот я как раз прочитал какую-то русскоязычную книжку про C++, где примеры были про VC++ 5.0.

Q>Прихожу на развал дисков у метро, прошу VC 5. Говорят уже есть VC 6, бери его.
Q>Ну я и взял, и понеслось. В 99 уже коммерческий проект на нем пилили... Официальный уже тогда купли, конечно.

Гм... Ну, все может быть. Возможно, это просто до нас все с опозданием доходило. Силюсь вспомнить, к каком году мы переползаци с 5.0 на 6.0. Помню еще в диковинку были новый дизайн, новые расширения у файлов — вместо привычных dsp/dsw — sln и prj.
--
Re[4]: Функция шаблон проверки
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 27.10.23 15:12
Оценка:
Здравствуйте, rg45, Вы писали:

Q>>Он вышел в 98 и недотягивал до стандарта C++98.


R>не-не, в 98-м вышел VS 5.0, это я хорошо помню. VS 6.0, вышел чуть позже — на пару-тройку лет, точно не помню уже, какой это был год.


Вики врёт что 5ка вышла в феврале 97го, а 6ка — летом 98
Маньяк Робокряк колесит по городу
Re[6]: Функция шаблон проверки
От: qaz77  
Дата: 27.10.23 15:12
Оценка: +2
Здравствуйте, rg45, Вы писали:
R> Помню еще в диковинку были новый дизайн, новые расширения у файлов — вместо привычных dsp/dsw — sln и prj.

Как раз в 6ке были dsw и dsp.

ЗЫ. Они у меня до сих пор в svn лежат).
Отредактировано 27.10.2023 15:15 qaz77 . Предыдущая версия .
Re[7]: Функция шаблон проверки
От: rg45 СССР  
Дата: 27.10.23 15:16
Оценка:
Здравствуйте, qaz77, Вы писали:

Q>Как раз в 6ке были dsw и dsp.


Ох, блин, что-то с памятью моей стало. В кладовке валяются старые винты с шестерочными проектами, нужно будет подключить как-нибудь, посмотреть что там.
--
Re[5]: Функция шаблон проверки
От: rg45 СССР  
Дата: 27.10.23 15:27
Оценка:
Здравствуйте, Marty, Вы писали:

M>Вики врёт что 5ка вышла в феврале 97го, а 6ка — летом 98


Да, видимо, так все и было, просто мой носитель информации постепенно изнашивается, походу.
--
Re[2]: Функция шаблон проверки
От: Carc Россия http://www.amlpages.com/home.php
Дата: 27.10.23 21:18
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, wbear, Вы писали:


W>>Старый проект. Среда VC 6.0.

W>>Попытка оптимизации проекта.

W>>Создал шаблоны функций проверки нахождения записи в массиве. Но компилятор ругается что для класса CBlockType не определен оператор ==.


W>>В чем ошибка?

Жизненный опыт показывает что проблемы именно в VC 6.0, и в области ADL решались установкой пятого сервис-пака Visual Studio 6.0 SP5.
В идеале, лучше бы поставить и шестой сервис-пак Visual Studio 6.0 SP6.
Тогда ADL нормально начинает работать.

Разве что накатывать из инсталлятора VS 6.0 (+ SP.xx), та еще развлекуха под сравнительно новыми Windows.
В XP, кряхтя, пердя и матерясь инсталляторы и самой 6-ой студии, и сервис-паков еще работали. Но вот потом...

Проблемы начались с Windows 7. Но была статья, как похакать чтобы инсталлятор 6-ой студии заработал. Пробовал в 7-ке, и 10-ке. Работает.
А сервис-паки я накатывал методом заката солнца вручную, аккуратно распаковывая нужные файлы из cab-архивов сервис-паков.
Aml Pages Home
Отредактировано 27.10.2023 21:19 Carc . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.