Unable to invoke Code Completion due to errors in source code

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
MiReQ
Сообщения: 28
Зарегистрирован: 13 май 2009, 13:06
Откуда: Россия, Пермь
Контактная информация:

C++ Builder 6.0 (Build 10.157)

С определенного момента перестает работать Ctrl+Space, хотя проект компилируется нормально, даже без Warning'ов...

Код: Выделить всё

//...[color="DarkGreen"]
Newproject1->Visible=((nodelevel(TreeView1->Selected)==1)&&(TreeView1->Selected->Text=="Projects"));
Newstory1->Visible=((nodelevel(TreeView1->Selected)==2)[/color]&&[color="DarkRed"](TreeView1->Selected->Parent->Text=="Projects"))||((nodelevel(TreeView1->Selected)==3)&&(TreeView1->Selected->Text=="Stories"));[/color]
//...
Зеленым отмечено место, где Ctrl+Space работает, красным - где уже нет.

Newproject1, Newstory1 - кнопки PopupMenu
nodelevel - моя функция ( int nodelevel(TTreeNode* node); )
TreeView1 - TTreeView*, собственно :)

В чем причина?
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Builder вообще часто глючит на этом. Не обращай внимания, главное чтобы прога работала.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

TreeView1->Selected->Parent->Text=="Projects"


Свойство Parent должно по идее возвращать указатель на родительский узел дерева. Но если текущая позиция является корневой в дереве, то свойство Parent должнo вернуть нулевой указатель или выдать какое-то сообщение об ошибке.
А в твоём коде производится какая-нибудь проверка указателя на ноль? Судя по всему не производится.
MiReQ
Сообщения: 28
Зарегистрирован: 13 май 2009, 13:06
Откуда: Россия, Пермь
Контактная информация:

WinMain писал(а): А в твоём коде производится какая-нибудь проверка указателя на ноль? Судя по всему не производится.
ну, nodelevel, по сути, и проверяет...
на сколько мне известно, if ((cond1)&&(cond2)), если cond1 не выполняется, то cond2 не вычисляется...

/*
nodelevel(node)=-1, если node==NULL
nodelevel(node)=0, если node!=NULL && node->Parent==NULL
...
*/

но, все-равно, сейчас проверю...
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
WinMain писал(а): А в твоём коде производится какая-нибудь проверка указателя на ноль? Судя по всему не производится.
Переделал, помогло :) Спасибо.
Но, все-таки мне кажется, что дело было не в этом...
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Однозначно дело было не в этом - тебе просто указали возможную ошибку в коде.

То, что высвечивает помощник не относится ни к компиляции, ни, тем более, к runtime. Помощник сам анализирует исходные файлы и часто это делает не совсем корректно.

Как билдер, так и студия частенько глючат на подсказках. В случае студии, как правило, помогает перестройка browse info. Для билдера должно быть что-то похожее.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить