• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Ошибка "declaration of 'T' shadows template parameter ksAPI7.h"

Автор MrBarry, 08.09.23, 09:23:14

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

MrBarry

Тема создана как справка для тех, кто тоже столкнётся с данной проблемой.

Суть такая: при подключении файла ksAPI7.h вылетает около сотни идентичных ошибок:
[bcc64 Error] ksAPI7.h(71126): declaration of 'T' shadows template parameter ksAPI7.h(15497): template parameter is declared hereРешение было подсказано пользователем TedyIV в теме от 2019 года, а именно заменить в этом файле во всех декларациях template <class T> букву T на другую букву, что он и сделал. Но это долго и муторно делать самостоятельно. Я не нашёл другого решения, так что сел и муторно сделал (с час правил в каждом месте в нещадно лагающем C++ Builder, удовольствие сомнительное).
Если кто знает другое, более аккуратное решение, можете подсказать, и это будет неплохо. Но замена тоже работает, и для всех кто тоже с этим столкнётся, чтобы не мучаться просто держите отредактированный файл.

p.s. Не забудьте убедиться что во всех директориях для Include path не будет лежать несколько разных ksAPI7.h, а то кто его знает какая из них будет использоваться (к другим файлам тоже относится)

Scull_

Для C++ это нормально, переменные: T, Т, t и т - четыре разные, первые две вообще зрительно отличить невозможно.

Vi2

Причём тут написание буквы Т в латинском и русском варианте? Там, скорее всего, проблема в том, - раз меняются не все template<class T>, а выборочно, - что используется тип Т и используется параметр Т в описании функции интерфейсов. Я не знаю, почему C++ Builder не разделяет такое использование:
interface ICurve2D  : public Kompasapi7_tlb::IKompasAPIObject
{
public:
...
  // [5] Проекция точки на кривую.
  virtual HRESULT STDMETHODCALLTYPE PointProjection(double X/*[in]*/, double Y/*[in]*/,
                                                    double* Kx/*[out]*/, double* Ky/*[out]*/,
                                                    double* T/*[out]*/, double* Angle/*[out]*/,
                                                    VARIANT_BOOL* Result/*[out,retval]*/) = 0;

Самый простой вариант для C++ - использование директивы #import, если, конечно, C++ Builder её допускает и не генерит подобный упомянутому ksAPI7.h файл. Изменение ksAPI7.h, если верить WARNING в начале этого файла, может быть удалено студией при определённых условиях.

MrBarry

Не знаю проблема ли это C++ Builder в целом или у меня в частности, но import я так и не смог использовать ни для какого файла. При компиляции резко появляется куча ошибок. И под куча я подразумеваю прям весь импортированный файл компилится с ошибками. Рекорд заскринил, оцените)

Vi2

К сожалению, я не работаю с С++ Билдером. У меня MS Studio. Но я не вижу проблемы, если Билдер поддерживает стандарт С++.

PS
Мог бы несколько сообщений приложить, не все тысячи.

По исходному сообщению я не смог определиться с числами ошибочных строк: ksAPI7.h(71126): declaration of 'T' shadows template parameter ksAPI7.h(15497): template parameter is declared here