Ошибки при компиляции в VS 2015 с ObjectARX SDK 2017

Автор Тема: Ошибки при компиляции в VS 2015 с ObjectARX SDK 2017  (Прочитано 11189 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Вот такая ошибка везде идет при компеляции предыдущего проекта ниже arx 2017.
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Что куда прописать чтобы она исчезла, вопрос для тех кто это уже прошел? Хотелось бы не тратить на миграцию месяцы в бесконечных поисках по google.

Где вообще найти быструю и полезную справку как мигрировать на  arx 2017. Набираешь например, ошибку и чтобы сразу решение видеть. Есть такая справка у Автодеска?

По установке VS2015 и Arx-wizard'a скажу что "Пути господни неисповедимы" Как случайно все не устанавливалось, так случайно все установилось.  Даже wizard заработал. Но время ушло много к сожалению! Кстати, Александр, твой проект с wizard'а думаю помог, после того как его открыл, VS2015 решил докачать доп. модули. Устанавливал все без интернета.

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Wizard в этих версиях работает? Не пробовал установку/удаление делать от Администратора с отключенным UAC?
в остальных студиях всё работает. UAC я выключаю сразу после установки Windows :) раз и на всегда, но все программы по привычке устанавливаю "от администратора".
А если студию запускать от Администратора?
а я и есть администратор :), но если запустить "от администратора", то результат тот же.

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int Что куда прописать чтобы она исчезла, вопрос для тех кто это уже прошел?
а это, батенька, несоответствие типов. тут подход индивидуальный. раньше, например, я пользовался переменной long или int, если нужно было узнать размер выборки (acedSSLength), хотя автодеск рекомендовал пользоваться Adesk::Int32. раньше проходило, а теперь лавочку прикрыли. та же беда с булевыми типами. так что еще раз повторюсь, каждая такая ошибка лечится индивидуально.
Где вообще найти быструю и полезную справку как мигрировать на  arx 2017. Набираешь например, ошибку и чтобы сразу решение видеть. Есть такая справка у Автодеска?
а еще было б неплохо чтоб была база с готовыми исходниками разных функций :):):). натягал к себе в нужном порядке и готово. но, увы, такого нет. а по поводу миграции - есть в справке ARX файлик arxmgr.chm. причем желательно устранять не только то, что уже не работает в текущей версии (описано в этом файлике) а и пытаться избавиться от того, что помечено к удалению в дальнейших версиях (тоже написано в этом же самом файлике). на моей памяти самым болезненным был переход на юникод, вот там даже мануал был и умельцы делали автоматические "перегонные аппараты" для исходников. а сейчас просто смысла нет. код, написанный в 2012 студии будет 100% рабочим в 2015, при условии, что выполнены все предписания по миграции из файлика arxmgr.chm.
вот если не работает код, тогда лезу смотреть, что ж они там намудрили и делаю заплатки. в этом переходе основная проблема - несоответствие типов. 21 проект перебрал за час. так что ничего страшного в ошибках нет. просто нужно уметь с ними бороться )))

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
21 проект перебрал за час. так что ничего страшного в ошибках нет. просто нужно уметь с ними бороться )))
Спасибо! Хотелось бы конструктива как перебирать, что и где менять чтобы так же за час все исправить. Просто таких ошибок в первом же проекте сотни!!! Напишите пожалуйста, конкретно ваш опыт. Для чего этот форум тогда вообще. Прозой  делиться? Хотя бы ссылку дайте.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Где вообще найти быструю и полезную справку как мигрировать на  arx 2017. Набираешь например, ошибку и чтобы сразу решение видеть. Есть такая справка у Автодеска?
Нет. Это вообще не проблема Autodesk. И это не проблема миграции ObjectARX с 2016 на 2017 версию. Это проблема ужесточения требований компилятора С++ в версии 2015.
Хотя бы ссылку дайте.
Первая ссылка в Гугле описывает причину появления ошибки и как с ней бороться: https://msdn.microsoft.com/en-us/library/ms173696.aspx
В частности нельзя описывать функцию/метод так:
Код - C++ [Выбрать]
  1. myfunc()
  2. {
  3.   return 1;
  4. }
А нужно описывать:
Код - C++ [Выбрать]
  1. int myfunc()
  2. {
  3.   return 1;
  4. }

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Хотелось бы конструктива как перебирать, что и где менять чтобы так же за час все исправить. Просто таких ошибок в первом же проекте сотни!!!
вот если честно, совсем не понял. ну, есть ошибки. и что? исправляем ошибку и становится на одну меньше. и так аж до тех пор, пока проект не соберется в arx-файл.
Для чего этот форум тогда вообще. Прозой  делиться?
ну, иногда и так получается. вот, например, если человек задает конкретный вопрос, он получает конкретный ответ. а если хочется поговорить о жизни :), то тогда можно и прозой поделиться.
ну и если позволите, встречный вопрос. как у вас с С++ и с владением студией в принципе обстоят дела? Если честно, первое, что интуитивно хочется сделать увидев сообщение об ошибке компиляции, это клацнуть дважды на строку с ошибкой, чтоб сама студия подсветила строку в коде, где эта ошибка появляется. ну и глядя уже на строку кода, а не на сообщение error C4430: missing type specifier - int assumed. Note: C++ does not support default-int, гарадзо легче сказать, чего от нас хочет студия.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Для чего этот форум тогда вообще. Прозой  делиться?
Это форум для помощи тем, которые хотят чтобы им помогали. Для тех, кто и сам прикладывает усилия для того, чтобы решить свой вопрос и для этого занимается самообразованием. И для тех, которые готовы помогать другим.
Мне показалось или я давал совершенно конкретные ответы на поставленные тобою вопросы? И неоднократно. Или это мне приснилось и я только прозой делюсь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
В частности нельзя описывать функцию/метод так:
Вот это понятно. Конкретно приведен код - уже помощь. Всегда тебя благодарю!
На счет прозы это я на письмо Николая отписал, погорячился. Понятно что ошибка, но что на такую рутину придется уйму времени убить не ожидал. Думал что любимое сообщество подскажет какой-нибудь ТРЮК как проблему быстро решить, сэкономить время. А не бери лопату и разгребай очередную гору выросшую на ровном месте. Все на голову разработчикам валится. Сколько их осталось в России уже?
На счет, что Автодеск ни при чем, может и да, но косвенно, не мигрируешь на 2017 не пустят в их магазин... Сделали бы какую нибудь директиву чтобы одним махом проблема исчезла... 

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Портирование на VS 2015
error C2664: 'Acad::ErrorStatus AcDbDatabase::readDwgFile(AcDwgFileHandle *,bool,const wchar_t *)': cannot convert argument 2 from 'int' to 'AcDbDatabase::OpenMode'

Код - C++ [Выбрать]
  1.                 AcDbDatabase db;
  2.                 db.readDwgFile(LPCTSTR(str), _SH_DENYWR); //error здесь на точке
  3.                 SetListMark(arr, &db);
  4.  

Что делать? В google решения не нашел.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Что делать?
Найти .h файл с методом AcDbDatabase::readDwgFile (это dbmain.h) и прочитать:
Цитировать
    // Note that the old overload of this method which took an int _SH_DENYxxx
    // arg is removed. You have to call this method using the OpenMode arg
    // to specify the access and sharing. See above OpenMode comments for
    // the mapping from _SH_DENYxxx to kXXXShare enum vals.
Сделать вывод, что вместо _SH_DENYWR следует использовать kForReadAndReadShare, а так как это значение по-умолчанию, то достаточно будет:
db.readDwgFile(LPCTSTR(str));
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Опыт растет в переходе на arx2017 и vs2015, спасибо за Ц.У.. Опять спрашиваю то, что не знаю. Как пройти очередную ошибку, где искать решение?

1>cls_base.cpp(1725): error C2678: binary '>>': no operator found which takes a left-hand operand of type 'VBaseFile' (or there is no acceptable conversion)

Код - C++ [Выбрать]
  1. void cLwpolilineC::setZ(double z)
  2. {
  3.         for(int i=0;i<arrPt.length();i++)
  4.                 arrPt[i].z = z;
  5.         normal = AcGeVector3d::kZAxis;
  6. }
  7.  
  8. void cLwpolilineC::loadBin(VBaseFile &file)
  9. {
  10.         cContour::loadBin(file);
  11.         int n;
  12.         file >> normal >> (int)isClose >> n;         //error on the second >> for vs2015

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Тут я тебе ничем не помогу. Я понятия не имею что это за класс VBaseFile, у которого компилятор C++ не находит перегруженный оператор '>>', принимающий в качестве параметра объекты классов AcGeVector3d и/или int
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Засада. А какова природа данной ошибки. Опять несоответствие типов или что-то другое? Что в хелпе миграции на эту тему есть, если есть вообще? В VS2012 проблем не было.
Или еще более подробней можно объяснить. Ну увижу я этот класc, что в нем искать?  Что значит (or there is no acceptable conversion) перевод ясен, т.е. это только для VS2015 где конвертация типов изменилась? Где рыть?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А какова природа данной ошибки
Не знаю.
Опять несоответствие типов или что-то другое?
Вполне возможно.
Что в хелпе миграции на эту тему есть, если есть вообще?
С вероятностью 90% это не имеет никакого отношения к ObjectARX.
Ну увижу я этот класc, что в нем искать?
Искать operator >>(), смотреть есть ли он, какие параметры принимает и т.д. Не видя кода ничего подробнее сказать не могу.

Off-Topic: показать
Виталий
Я вижу только два варианта решения твоих проблем:
1. Ты нанимаешь нормального C++-программиста, который решает такого рода вопросы.
2. Ты самостоятельно изучаешь C++.

« Последнее редактирование: 10-06-2016, 14:11:33 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
скорей всего не хватает каких-то инклудов.  от студии к студии такое наблюдается. вряд ли изобретался велосипед с нуля (уж очень конструкция похожа на std::ifstream), так что скорей всего спасет вставка в начало файла чего-то типа (а может и всего сразу :) ):
Код - C++ [Выбрать]
  1. #include <string>
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
ps: вообще-то, чтоб точно понять что это за ошибка, нужно знать, что из себя представляет класс VBaseFile. 

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
скорей всего не хватает каких-то инклудов.
Не помогло
ps: вообще-то, чтоб точно понять что это за ошибка, нужно знать, что из себя представляет класс VBaseFile.
Высылаю полный текст ошибки и сам класс чтобы понять точно ошибку. Надеюсь поможете. Непонятно почему в самом классе VS не находит ошибки?  Это так, вопрос для общего развития.

Отмечено как Решение Виталий 11-06-2016, 10:47:38

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Тебе совершенно четко говорится, что ошибка из-за:
Цитировать
1>  cls_base.cpp(1727): note: while trying to match the argument list '(VBaseFile, int)'
В коде ты из файла читаешь:
Код - C++ [Выбрать]
  1.       file >> normal >> (int)isClose >> n;         //error on the second >> for vs2015
1) normal - судя по всему это AcGeVector3d и для него есть VBaseFile& operator>>(AcGeVector3d& v)
2) (int)isClose - а вот тут у тебя нет оператора VBaseFile& operator>>(int n), а есть только VBaseFile& operator>>(int &n), который не согласуется.
Кстати, а какого типа у тебя isClose - в коде это не видно, т.к. ты показываешь   обрывки кода.
Попробуй заменить на:
Код - C++ [Выбрать]
  1. int n;
  2. int n_isClose;
  3. file >> normal >> n_isClose >> n;
  4. isClose = n_isClose;

Кстати, если твой код использовался в предыдущих версиях AutoCAD, то значение isClose должно было быть неопределённым.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Непонятно почему в самом классе VS не находит ошибки?
А в классе нет ошибки - ошибка в использовании класса.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Кстати, если твой код использовался в предыдущих версиях AutoCAD, то значение isClose должно было быть неопределённым.
1
Спасибо! Ошибка ушла. Тип Adesk::Boolean isClose; Для компилятора ошибок нет, но повлияет данная корректировка на что нибудь другое если isClose в других местах еще используется?
2
У меня что-то в vs2015 часто изображения иконок пропадают, т.е. меню все чисто серое? Стало надоедать угадывать команды. 

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Тип Adesk::Boolean isClose;
До ObjectARX 2017 это был BOOL (или int), теперь bool.
Для компилятора ошибок нет, но повлияет данная корректировка на что нибудь другое если isClose в других местах еще используется?
Может повлиять если в файл писали в предыдущей версии AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Изменения для vs2017 в связи с несоответствием типов не повлияют на компиляцию в vs2010 и vs2012 ? Их просто много, нужно ли в листингах проверку делать на каждый VS? 

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Изменения для vs2017 в связи с несоответствием типов не повлияют на компиляцию в vs2010 и vs2012 ? Их просто много, нужно ли в листингах проверку делать на каждый VS? 
Проверяй. Что будет конкретно в твоем коде я заранее угадать не могу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Проверяй. Что будет конкретно в твоем коде я заранее угадать не могу.
Ну а в принципе чисто замена int и long на Adesk::Int32 ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Повторюсь. Проверяй. Практика - критерий истины.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение