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

Стандартом не оговорено, какие стандартные заголовки должны включаться в другие стандартные заголовки. Так что конкретные реализации могут отличаться в этом плане.
Любите книгу — источник знаний (с) М.Горький
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 происходит.
Ибо компилялся весьма большой проект, и происходило "это" в дебрях
шаблонного класса. Я же привёл редуцированный до минимальной воспроизводимости пример.
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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.