LINUX.ORG.RU

[c++] [Forward Declaration] Можно ли использовать сабж для типа string?


0

0

Объявить в хидере std::string как класс нельзя:

test.h:8: error: ‘string’ in namespace ‘std’ does not name a type

Включать iostream в хедер попахивает костылём.

P.S. Очень жаль, что тип string не интегрирован в сам язык, а находится iostream.


Очень жаль, что тип string не интегрирован в сам язык, а находится iostream

ты норкоман штоле? o.O

jtootf ★★★★★ ()

ты бы лучше код показал, что ты написал в .h. И определение std::string находится в <string>

alex_custov ★★★★★ ()

Реализация модульности через include попахивает костылём цепепе.

fixed

l5k ()

Что-то я не понял задачу, может это имеется в виду:
typedef std::string String;

m0rph ★★★★★ ()

>Включать iostream в хедер попахивает костылём.

Мне кажется что костыль это FD, а на инклуд

Elverion ()
Ответ на: комментарий от ShTH

Ну и включи #include <string> какие проблемы то?

PS: virtual std::string retstr();

bibi ()
Ответ на: комментарий от erfea

хм, а почему?!

А это нормально, если включить iostream сначала в хедер, а потом и в исходник с реализацией? А ещё предварительные объявления быстрее компилируются.

ShTH ()
Ответ на: комментарий от ShTH

>А ещё предварительные объявления быстрее компилируются.

Ну запихай все внешние хидеры в один, и прекомпилируй его.

А это нормально...?

А почему нет? Там же include guards.

Elverion ()
Ответ на: комментарий от ShTH

когда используется не ссылка и не указатель, тип должен быть полностью определён, т.е. #include <string>. Если используется ссылка или указатель, то можно делать FD, как показал lester_dev, нго только для простых случаев, когда сам класс std::string в заголовочнике <string> будет объявлен именно так (а он там может быть объявлен как угодно).

alex_custov ★★★★★ ()
Ответ на: комментарий от ShTH

А это нормально, если включить iostream сначала в хедер

во-первых, iosfwd; а во-вторых,- нахрена он тебе там нужен?

jtootf ★★★★★ ()
Ответ на: комментарий от ShTH

Достаточно включить только в заголовочник. FD здесь не работает, так как при возврате типа по значению (а не по ссылке или указателю) компилятор должен знать сколько выделить в стеке месте под возвращаемый тип. А это можно обеспечить только включив #include <string> в заголовочник.

Dendy ★★★★★ ()
Ответ на: комментарий от bibi

>Сам то пробовал?

Зачем, я и так знаю, что не работает.

Вот именно...

Лору срочно необходим смайлик :sarcastic:

lester_dev ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.