Re: stdexcept vs string (vc)
От: Bell Россия  
Дата: 11.02.04 09:00
Оценка: +1
Здравствуйте, e-Xecutor, Вы писали:

Стандартом не оговорено, какие стандартные заголовки должны включаться в другие стандартные заголовки. Так что конкретные реализации могут отличаться в этом плане.
Любите книгу — источник знаний (с) М.Горький
Re[6]: stdexcept vs string (vc)
От: Lorenzo_LAMAS  
Дата: 11.02.04 13:38
Оценка: +1
Так началось — то все с простого неправильного использования заголовков. На твое счастье, включался xstring, а если б не он, а string, то ты бы радостно скомпилил, а потом кто-то, использующий твою программу с другим компилятором/другой версией того же компилятора обкладывал бы матами уже тебя.
Of course, the code must be complete enough to compile and link.
stdexcept vs string (vc)
От: e-Xecutor Россия  
Дата: 11.02.04 08:47
Оценка:
Пытался я откомпилять код cl-ем, который успешно компилялся gcc-ой.
cl выдаёт такую вот занимательную ошибку:
a.cpp(10) : error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'const char [6]'

если разкомментарить выделенное, то есс-но всё ок.
Вопрос в том, почему так не компиляется то???
bcc сжевал молча

#include <stdexcept>
//#include <string>

using namespace std;

int main(int argc,char* argv[])
{
  string s;
  s=s+"hello";
  return 0;
}
Re: stdexcept vs string (vc)
От: Lorenzo_LAMAS  
Дата: 11.02.04 08:52
Оценка:
Если ты хочешь использовать строку, то есс-но ты должен включать заголовок <string>, а не надеяться на то, что он будет включен где-то кем-то еще.
Of course, the code must be complete enough to compile and link.
Re[2]: stdexcept vs string (vc)
От: e-Xecutor Россия  
Дата: 11.02.04 08:57
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Если ты хочешь использовать строку, то есс-но ты должен включать заголовок <string>, а не надеяться на то, что он будет включен где-то кем-то еще.

Да всё понятно, меня сильно смутила ошибка.
Если бы мне компайлер сказал "не знаю что за хрень — std::string", а
он бутор какой-то выдал.
Re[2]: stdexcept vs string (vc)
От: e-Xecutor Россия  
Дата: 11.02.04 09:03
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, e-Xecutor, Вы писали:


B>Стандартом не оговорено, какие стандартные заголовки должны включаться в другие стандартные заголовки. Так что конкретные реализации могут отличаться в этом плане.


Это всё понятно. Мне непонятены странные маты компилятора.
Ага... Уже понятны. Блин.
stdexcept инклудит xstring.
а в нём нет шаблонных operator+, они лежат в string.
Вот ведь #@$%@#$%....
Re[2]: stdexcept vs string (vc)
От: Lorenzo_LAMAS  
Дата: 11.02.04 09:03
Оценка:
И вообще ты довольно таки цинично опустил еще часть сообщения

D:\ld\main.cpp(8) : error C2676: binary '+' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' does not define this operator or a conversion to a type acceptable to the predefined operator
Error executing xicl6.exe.


Если залезть в <stdexcept>, то видно, что он включает <xstring>, тот содержит определение basic_string, но там нет оператора +.Зато через кучу других инклудов включен файл, содержащий operator + для итераторов, <utility>. Разумеется, он не подходит, о чем и сообщил cl
Of course, the code must be complete enough to compile and link.
Re[3]: stdexcept vs string (vc)
От: Lorenzo_LAMAS  
Дата: 11.02.04 09:05
Оценка:
EX>Если бы мне компайлер сказал "не знаю что за хрень — std::string", а
EX>он бутор какой-то выдал.

См. мой ответ ниже
Of course, the code must be complete enough to compile and link.
Re[3]: stdexcept vs string (vc)
От: e-Xecutor Россия  
Дата: 11.02.04 09:05
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>И вообще ты довольно таки цинично опустил еще часть сообщения


L_L>

L_L>D:\ld\main.cpp(8) : error C2676: binary '+' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' does not define this operator or a conversion to a type acceptable to the predefined operator
L_L>Error executing xicl6.exe.


L_L>Если залезть в <stdexcept>, то видно, что он включает <xstring>, тот содержит определение basic_string, но там нет оператора +.Зато через кучу других инклудов включен файл, содержащий operator + для итераторов, <utility>. Разумеется, он не подходит, о чем и сообщил cl


Уже докопался...
Ну и кто после этого те, кто так сделал?
Re[4]: stdexcept vs string (vc)
От: Lorenzo_LAMAS  
Дата: 11.02.04 09:10
Оценка:
EX>Уже докопался...
EX>Ну и кто после этого те, кто так сделал?
???????

Что сделал? Для использования строк нужно включать <string>.
Of course, the code must be complete enough to compile and link.
Re[5]: stdexcept vs string (vc)
От: e-Xecutor Россия  
Дата: 11.02.04 13:35
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

EX>>Уже докопался...

EX>>Ну и кто после этого те, кто так сделал?
L_L>???????

L_L>Что сделал? Для использования строк нужно включать <string>.


Вместо string заинклудили xstring.
В результате получилось кастрированное определение объекта.
В результате диагностика ошибок компиляции, и без
того не отличающаяся ясностью, выдала ошибку
не имеющую отношения к проблеме.
Оптимизаторы хреновы...

P.S. я не спорю относительно необходимости #include <string>.
Я мысленно крою матом того, кто придумал такой solution.
Я потратил достаточно много времени пытаясь понять что за shit происходит.
Ибо компилялся весьма большой проект, и происходило "это" в дебрях
шаблонного класса. Я же привёл редуцированный до минимальной воспроизводимости пример.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.