LINUX.ORG.RU

[C] [C++] Include

 ,


0

0

У меня в проекте все время вылезают ошибки вида «invalid use of incomplete type» или «error: expected class-name before '{' token».

Скажите, как правильно подключать файлы? Я при возникновении данной ошибки просто наугад ставил «class SomeClass;» или инклудил какой_нибудь файл (или наоборот #include убирал.

Или подскажите литературки. Заранее спасибо.


> наугад ставил "class SomeClass;" или инклудил какой_нибудь файл

мне страшно представить на что похож твой код :)

lester ★★★★
()

Страуструп, Керниган - Ричи

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

ну как же тебе помочь, если ты ``просто наугад [..]" ?

смотриш маны, там указано, для какой функции что включать надо. если это не помогает, грепиш системные инклюды в поисках определения конкретной функции или структуры. если то на что компилятор ругается самописное — делаеш соответственные декларации в своих инклюдах.

а так, каков вопрос — таков и ответ.

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

Мне не нужно, какая системная функция где лежит. у меня много своих файлов с моими классами, и я прекрасно знаю, где какие функции (а точнее классы) лежат. Проблема была не в том, что я не знаю, что нужно инклудить для timer_create (например), а в каком порядке и куда эти инклуды нужно прописывать. В моем случае я уже решил проблему тем, что переместил один #include из *.h-файла в *.cpp

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

> В моем случае я уже решил проблему тем, что переместил один #include из *.h-файла в *.cpp

всегда старайся в своих хедерах как можно меньше ссылаться на другие, в 99% случаев достаточно указать прототип

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

Да, задал банальный вопрос, выслушал правильный ответ, поклал на него презрительно с пробором и утвердился во мнении, что подобные проблемы решаются подбором (помогло ведь!), а не чтением каких-то там бумажек.

Не одному тебе не нравится такой ЛОР.

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

Не хотелось бы спорить...

> выслушал правильный ответ


ты имеешь ввиду это ?: "вот и выросло поколение школьников. кто там желал линукс в массы? нате -- жрите!"

> утвердился во мнении, что подобные проблемы решаются подбором


нет, я так не думаю. Вобщем-то и тему я создал за тем, чтобы избавиться от такого метода (подбор). И "бумажки" я читать люблю.

> всегда старайся в своих хедерах как можно меньше ссылаться на другие, в 99% случаев достаточно указать прототип


спасибо, так и буду делать в дальнейшем :) до этого наполовину ссылался, наполовину указывал прототип

xmM
() автор топика

Ставь «;» после определения класса, например. Подобные ошибки из за опечаток. Раздражают, да, но после 30-го раза запоминаешь и больше не делаешь таких ошибок. Рекомендую не колдовать а каждый раз детально разбираться с проблемой, находить её и устранять. Компьютер — не шаманский бубен а детерминированный автомат.

Legioner ★★★★★
()

> просто наугад ставил "class SomeClass;" или инклудил какой_нибудь файл
> просто наугад ... или ... какой_нибудь файл

> наугад ... или ... какой_нибудь


Фейспальмы. Сотни, тысячи их.

LamerOk ★★★★★
()

Советую топикстартеру, без всякой иронии, три вещи:

1. Понять, что инклуд на момент компиляции просто вставляет в текущий файл содержимое другого.

2. Почитать где-нибудь или самому подумать, как это было в моем случае, как компилятор обрабатывает исходные файлы.

3. Разобраться, когда необходимо полное описание класса, а когда достаточно только его определения. Если самому додуматься не получается, смотрите недавний топик в Development, ссылку искать не буду.

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

Ну и четвертое:). Не делайте ничего наугад, знаний оно вам не прибавит, а геморроя в дальнейшем - вполне.

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

>мне не нравится такой лор :-/

На ObjC ещё не написали ЛОРа, вперед =)

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

1) троллишь, ясное дело я имею ввиду не один из редких саркастических комментов, а те, что по делу.

2) ну ты, мягко говоря, заявил - я тыркался и у меня получалось! а когда тебе рассказали как надо и подпнули в правильные стороны, ты гордо заявил - да я уже дотыркался наугад, пока вы тут тупили. вот такой ЛОР мне не нравится.

3) а это вообще не я сказал, потому что я за такой подход покусал бы нафиг - глядя на хедеры сразу видно твои зависимости, с прототипами же - нет.

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

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

взаимоисключающие параграфы!

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