Автор Гілка: rpm manger  (Прочитано 5757 раз)

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: rpm manger
« Відповідей #15 : 2006-05-12 19:33:45 »
Ги-и-и, сину, LOL:) Я й не звернув увагу. Що ж, тоді всі питання знімаються...
ЗІ Незалежно від того, ким Ви себе вважаєте, раджу ставитись до чужих починань з повагою, навіть якщо проект Вам видається непотрібним. До побачення.

Відсутній Markus

  • Дописувач
  • **
  • дописів: 79
  • Карма: +0/-0
  • Програматор
Re: rpm manger
« Відповідей #16 : 2006-05-13 12:56:37 »
Панове, можна українською мовою, які претензії до мене висуває  Louser
Бо я щось не зрозумів пунктів
Цитата
імхо подивитись "як там KDevelop робе" можна й без цього.
та не дуже зрозумів питання
Цитата
Чи автора цікавить корисна робота?
Бо я не дуже розуміюсь в жаргонах користувачів лінукса.
Чи потрібні Україні програмісти, які не знають англійської мови?

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: rpm manger
« Відповідей #17 : 2006-05-13 13:22:58 »
Не звертайте уваги...

P.S. Вибачте, пане Louser, іноді до мене довго доходить... :)
« Змінено: 2006-05-14 10:28:01 від ISBear »

Відсутній ilya

  • Новачок
  • *
  • дописів: 13
  • Карма: +0/-0
  • I Love YaBB 2!
Re: rpm manger
« Відповідей #18 : 2006-06-09 16:15:58 »
1 Речі які  я писатиму нижче дуже легко взнати відкривши книжку з C++ чи її стандарт. все це дуже докладно описано
наприклад в
*C++ Professional Programmer's Handbook ANSI-ISO
*C++_By_Dissection
*ANSI ISO 14882 (C++ standart)
бінарний пошук у змісті - пара хвилин на читання - і не треба мучитись ночами, звинувачуюючи компілятор у відсутніх у ньому помилках та ваяти невідомо які милиці :)

2.
Цитата
inst_flags |= INSTALL_INSTALL;
inst_flags |= INSTALL_HASH;
але саме в останніх двох стрічках компілятор викидає помилку що не може перевести int в rpmInstallInterfaceFlags
Очевидно ви пишете на C++. В ньому не припускається неявне приведення int  до enum, лише enum до int.
А в С-ішному rpm це працює.

3.
Цитата
примусове переведення (rpmInstallInterfaceFlags) теж нічого не дало

Примусове приведення
inst_flags = rpmInstallInterfaceFlags(inst_flags | INSTALL_INSTALL |  INSTALL_HASH);
в мене і за стандартом працює!

4.
ви ймовірно неправильно приводили - ось так?
inst_flags |= (rpmInstallInterfaceFlags) INSTALL_INSTALL;
це не буде працювати, тому що оператор '|' визначений для int, а не для enum
таким чином відбудеться явне приведення int INSTALL_INSTALL до rpmInstallInterfaceFlags
після чого для виконання оператора  
inst_flags | (rpmInstallInterfaceFlags) INSTALL_INSTALL
обидва операнди будуть неявно приведені до int.  Результат типу int не може бути неявно приведений до типу лівої частини оператора присвоювання (див 2)

5.
Цитата
Ви чим компілите, gcc чи g++
цілком очевидно, що markus компілює в режимі C++, а як gcc вибрав цю мову - через опцію командного рядка, розширення файлу, чи запуску g++ - не має значення

6.
Цитата
Такий от трюк неможливий без RTTI
Такий 'трюк' цілком можливий у C і цілком неможливий у C++, незалежно від RTTI. RTTI тут взагалі ні до чого - дивіться далі

7.
Цитата
а воно, наскільки я пам'ятаю, у gcc вимкнено.  
мовний режим C чи C++ виставляється не запуском gcc а комбінацією факторів - див 5
RTTI - це спосіб взнати динамічний тип змінної і має стосунок лише до класів. ніякого стосунку ні до C, ні до перетворення між int та enum воно не має. Зрозуміло, що в C нема класів, і тому немає і RTTI

Цитата
Проблему вирішив кустарним способом.
А може у мене компілятор якийсь не правильний
А проблеми то не було, компілятор у вас правильний  і ніяких кустарних способів вигадувати не треба було - дивіться 3

Цитата
Якщо чесно мені такий підхід видається диким і абсурдним.
Якщо ви маєте на увазі розробку без ознайомлення з інструментом та доробками інших, і як результат - втрата часу і написання нікому непотрібних та малозрозумілих сторонній людині милиць -  то я згоден

Якщо ви маєте на увазі сильне типування enum - то його дотримуються в C++, Pascal всіх різновидів, C#

Цитата
Найшов вирішення проблеми Усмішка по вуха. Не знаю чим я думав раніше. Прблема була не в компіляторі. Просто потрібно було перевантажити оператор |= для типів rpmtransFlags і rpmInstallInterfaceFlags і програма компілюється без усяких проблем
Нічого ви не знайшли - адже причину помилки ви не довідались і знову недолугі костурі наваяли експериментальним шляхом. Дивіться 3.

Цитата
Чесно кажучи, я правильного компілятора зроду не бачив. Знаєте, які перли gcc часом видає, особливо gcc3? Тільки четвертий потрохи до стандартів приводять.
розкажіть, де вам ще компілятор заважає
« Змінено: 2006-06-09 16:50:10 від ilya »

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: rpm manger
« Відповідей #19 : 2006-06-09 17:10:44 »
Дякую. Про RTTI я таки зморозив не розібравшись - це й справді з іншої опери... Обіцяю виправитись. Щодо перлів gcc - довго розповідати про все, краще погугліть. Найпростіше
int main(void)
{
  int i = 3;
  int c[i];
  return 0;
}
компілюється gcc3.

І вони в основному не заважають, а допомагають, хоч абсолютно не відповідають стандартам.
Крім того, gcc4 взялись писати не просто for fun.

Відсутній ilya

  • Новачок
  • *
  • дописів: 13
  • Карма: +0/-0
  • I Love YaBB 2!
Re: rpm manger
« Відповідей #20 : 2006-06-09 17:43:46 »
це і в gcc4 компілюється

цитата з info gcc
Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C89 mode and in C++

цитата розробника GCC http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18894
Also I should note that since VLAs are in C99, there is some hope in getting them included in a later C++ standard.

Якщо хочете, щоб не компілювалось, вкажіть -ansi -pedantic

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: rpm manger
« Відповідей #21 : 2006-06-09 17:48:59 »
Може бути, бо дуже зручно. Але тим не менше, стандарту суперечить.

Відсутній Markus

  • Дописувач
  • **
  • дописів: 79
  • Карма: +0/-0
  • Програматор
Re: rpm manger
« Відповідей #22 : 2006-06-12 20:39:28 »
Вельми вдячний за змістовно викладений шлях вирішення моєї (як потім виявилось) простої проблеми. Врахую це все на майбутнє.
Цитата
Нічого ви не знайшли - адже причину помилки ви не довідались і знову недолугі костурі наваяли експериментальним шляхом. Дивіться 3.
Може це звучить наївно, але програма все таки зібралась і
запрацювала. Також, як я потім довідався, непотрібно було цього переведення,
непотрібно було перезавантажувати оператори. Просто потрібно було присвоювати
ці всі опції змінним типу int, а потім при передаванні цих заначень функціям із
rpm-devel перевести їх у тип rpmInstallInterfaceFlags. Про це я дізнався
 переглядаючи код старої версії KPackage бо в новій версії розробник передав
всі обов’язки інсталяції пакунків програмі rpm, тобто використовує клас KProcess.
 Аналогічно вчинили німці із своїм yast-packagemanager правда там вони зробили більш
професійно(а може вони просто хотіли заплутати код  :)) написавши власний клас KProcess. Тому і я вирішив піти цим шляхом - бо так і код програми буде менший в обсязі та й помилок буде менше :)
Чи потрібні Україні програмісти, які не знають англійської мови?