Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/37: Рейтинг темы: голосов - 37, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 02.10.2009
Сообщений: 3
1

C++ Builder 6 - не работает Code Completion в конце больших модулей

02.10.2009, 09:31. Показов 6903. Ответов 9
Метки нет (Все метки)

При написании программы столкнулся с глюком 6го Билдера - при превышении некоторого размера модуля (у моем случае чуть больше 80 Кб) Code Completion работает только до определенной строки, при редактировании исходов в конце модуля вылетает "Unable to invoke Code Completion due to errors in source code". Все компилируется без проблем, ошибок в коде нет.
Кто-нибудь знает, как победить эту проблему?
Многие пишут, что добавляют новые функции в начало модуля. Это действительно помогает, но что делать, если нужно отредактировать старый код в конце модуля - снова перемещать его вверх?
Я уже вынес все вспомогательные функции (не использующие VCL) в отдельный модуль (с созданием класса), уменьшил модуль на 7 Кб, но и при 75 Кб все равно наблюдаю проблему. Как быть с функциями, которые привязаны к форме? Можно ли разнести функции одного класса на 2 модуля? Если да, был бы очень благодарен за пример, как это сделать.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2009, 09:31
Ответы с готовыми решениями:

Ошибка: Unable to invoke Code Completion due to errors in source code
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Code blocks, code completion, opengl
Подскажите пожалуйста можно ли как нибудь в code blocks к code completion подключить opengl из sfml?

Code::blocks code completion , sfml
Я использую sfml функция "code completion" работает со всеми частями sfml. Однако данная функция...

Как понять ошибку: "Unable to invoke Code Completion due to errors in source code"
Неподскажите что означает эта надпись????:)) Unit1.cpp(1): Unable to invoke Code Completion...

9
Супер-модератор
8758 / 2487 / 140
Регистрация: 07.03.2007
Сообщений: 11,809
02.10.2009, 09:41 2
Palych, ну создай просто Unit и перенеси туда функций побольше... у меня тоже был большой модуль, так он тоже не компилировался, делал, как тебе написал - вынес классов пару-тройку в новый юнит
0
0 / 0 / 0
Регистрация: 02.10.2009
Сообщений: 3
02.10.2009, 10:00  [ТС] 3
VoodooMan, я просто всегда писал на Дельфе, а сейчас пришлось Билдер осваивать, никогда так с модулями не извращался, поэтому сразу извиняюсь за ламерские вопросы. Если мона, чуть поподробней - мне нужно создать еще один cpp файл, сослаться из него на хидер модуля формы (#include "main.h"), тупо перенести туда половину функций класса формы и в main.cpp прописать #include "main2.h"?
0
Супер-модератор
8758 / 2487 / 140
Регистрация: 07.03.2007
Сообщений: 11,809
02.10.2009, 10:10 4
Palych, понимаете, тут топорно оттяпать не получится, надо глянуть, например, какие функции можно использовать по всему проекту и вынести их в отдельный юнит, а его хидер прописать там, откуда вы их вынесли, тут надо смотреть по коду
1
1 / 1 / 0
Регистрация: 06.10.2009
Сообщений: 12
01.11.2009, 16:26 5
Столкнулся с подобной проблемой. Не понимаю как правильно вынеси функцию в отдельный модуль. Дело в том, что функция использует глобальные переменные, и отказывается их видеть в отдельном модуле. Спасает конечно объявление этих переменных через extern в новом модуле, но многие не рекомендуют пользоваться внешними переменными. Есть ли вариант без внешних переменных?

Добавлено через 11 минут
эээ поправка. Через экстерн не помогает. Code Completion всё равно не работает.
Может кто нибудь объяснить поподробнее, как подключить модуль(прописывать #include <*.cpp>, или #include <*.h>?), в каком месте прописывать, куда в новом юните прописывать объявление функция (unit.cpp или unit.h), в каком месте (после какой строчки).
На данный момент у меня объявление функций перенесено в Unit1.cpp, а в основном юните прописано #include <Unit1.h>. При этом проект не видит функции. Если прописать в основном юните #include <Unit1.cpp>, то всё возвращается назад (не работает Code Completion). Я совсем запутался.
0
Супер-модератор
8758 / 2487 / 140
Регистрация: 07.03.2007
Сообщений: 11,809
01.11.2009, 17:28 6
какие переменные и функции нужны, такие заголовки и подкючаешь с помощью include (понятное дело, что прототипы функций и описание переменных тоже должно быть в этих заголовках)
0
1 / 1 / 0
Регистрация: 06.10.2009
Сообщений: 12
01.11.2009, 17:38 7
Пример:
есть переменные
C++
1
2
TCSpinEdit * SpinMem[18];
int UpRate[18],DownRate[18];
есть функции, которые я хочу вынести в отдельный юнит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
void SetMinSkills (void)
{
  for(int i=0;i!=18;i++)
  {
    SpinMem[i]->MinValue = SpinMem[i]->Value;
  }
}
 
void ControlSE (void)
{
  for(int i=0;i!=18;i++)
  {
    if(SpinMem[i]->Value < 101) UpRate[i] = 1;
    else if(SpinMem[i]->Value < 126) UpRate[i] = 2;
     else if(SpinMem[i]->Value < 151) UpRate[i] = 3;
      else if(SpinMem[i]->Value < 176) UpRate[i] = 4;
       else if(SpinMem[i]->Value < 201) UpRate[i] = 5;
        else UpRate[i] = 6;
 
 
 
    if((SpinMem[i]->Value - SpinMem[i]->Increment) < 101) DownRate[i] = 1;
    else if((SpinMem[i]->Value - SpinMem[i]->Increment) < 126) DownRate[i] = 2;
     else if((SpinMem[i]->Value - SpinMem[i]->Increment) < 151) DownRate[i] = 3;
      else if((SpinMem[i]->Value - SpinMem[i]->Increment) < 176) DownRate[i] = 4;
       else if((SpinMem[i]->Value - SpinMem[i]->Increment) < 201) DownRate[i] = 5;
        else DownRate[i] = 6;
 
 
    if(StrToInt(CalcForm->SkillPoints->Text) < UpRate[i])
    {
      SpinMem[i]->MaxValue = SpinMem[i]->Value;
    }
    else
    {
      SpinMem[i]->MaxValue = 300;
    }
 
    if(SpinMem[i]->MinValue == SpinMem[i]->MaxValue)
     SpinMem[i]->ReadOnly = true;
    else
     SpinMem[i]->ReadOnly = false;
 
  }
}
Если мне просто вынести функции в Unit.2.cpp, и прописать #include <Unit2.h> в первом юните, то ничего не получается. Что мне еще нужно прописать, и где? В каких файлах, и в каком место файлов?
Это именно то место, которое мне непонятно.
0
Супер-модератор
8758 / 2487 / 140
Регистрация: 07.03.2007
Сообщений: 11,809
01.11.2009, 17:42 8
да что сложного-то? просто передавайте переменные в качестве параметров в функции, тогда вам надо будет только подключить хидер файла с функциями, вот и все
0
1 / 1 / 0
Регистрация: 06.10.2009
Сообщений: 12
01.11.2009, 19:01 9
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
да что сложного-то? просто передавайте переменные в качестве параметров в функции, тогда вам надо будет только подключить хидер файла с функциями, вот и все
Тогда другой вопрос: как правильно в функцию передать указатель на массив, и как вызывать такую функцию. Как передать массив - знаю. Как передать указатель - знаю. А указатель на массив не получается. Мне просто нужно что б в процессе работы функции изменялся именно глобальный массив.
0
1683 / 884 / 202
Регистрация: 25.11.2009
Сообщений: 1,808
10.12.2011, 10:47 10
Тема очень старая, но актуальная, так что отпишусь...

Бывает, что в большом проекте Code Completion перестаёт работать начиная с n-ой строки.
Тут помогает отключение некоторых warningов:
Project->Options, вкладка Compiler, кнопка Warnings.
Отключаем W8004 и W8057.
После этого должно работать.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2011, 10:47

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Code completion delphi 2010
скинул проект с работы думал дома поработать но заметил что перестал работать code completion,...

Этот скрипт работает на конце странице. Как сделать чтобы работал на конце DIVа?
&lt;script&gt; $(document).ready(function(){ $(window).scroll(function(){ var position =...

Почему данный код работает в builder 6 а в builder 10 не работает?
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.