Grizzly 0 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 21 минуту назад, Метценгерштейн сказал: m- у нас указатель, т.к. new. Foo.cpp A* m = nullptr; // или NULL в зависимости от стандарта C++ ... void init() { ... m = new A(); ... } Boo.cpp extern A* m; void work() { ... m->loop(); ... } Если несколько файлов, где должен использоваться m, то поместить extern в заголовочный файл, который затем подключать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 7 minutes ago, Метценгерштейн said: вот в начале файла идет объявление: . . . --- A_class.hpp ------- . . . . . extern A *m; --------- main.cpp ------ #include "A_class.hpp" A *m; main() { m = new A(); . . . m->Stop(); delete m; } ----- module use_class_A.cpp ------ #include "A_class.hpp" if( m != NULL ) m->Go(); . . . . мог нахомутать, но в общем вроде так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба Может лучше удочкой научится пользоваться, чем рыбу ждать ? https://www.ozon.ru/context/detail/id/140891511/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 1 minute ago, x893 said: Может лучше удочкой научится пользоваться, чем рыбу ждать ? Лафоре у меня есть. Но читать всё и до конца времени нет- надо делать задачу. И спасибо всем, проброшу как экстерн ее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 46 минут назад, k155la3 сказал: Отработайте "механизм" на том что знакомо, на структурах, а затем их "плавно" преобразовать в класс, если это еще потребуется. Вообще-то структура в си++ - это то же самое, что класс. Единственное отличие между ними: в struct область видимости по-умолчанию - public, в class - private. Других отличий нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба extern переменная типа класса и/или указателя на класс/структуру в хедере этого же класса - обычный прием, так что без проблем... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 1 час назад, Метценгерштейн сказал: объект m создан. m у вас не объект, а указатель на объект класса A. А объект будет == *m 23 минуты назад, Метценгерштейн сказал: Лафоре у меня есть. Но читать всё и до конца времени нет- надо делать задачу. Вам надо язык сначала изучить. си++. А решать какую-то задачу ещё рано. 35 минут назад, Метценгерштейн сказал: вот в начале файла идет объявление: myClass* m; В начале какого файла? Чтобы какое-то объявление было видимо в разных .c-файлах, нужно объявлять в .h, а потом эти .h подключать в нужные .c. И тип данных (структуру/класс) - в .h и объявление переменных (как глобальных объектов так и глобальных указателей на них) - тоже в .h. А уже определение переменных - в .c. PS: Это основы языка си, которые Вы должны были узнать на этапе его освоения. "Решать какие-то задачи" не зная языка программирования - это как писать роман не зная языка на котором пишешь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 14 minutes ago, jcxz said: . . . структура в си++ - это то же самое, что класс. . . . Да, "плавно" как раз в этом смысле :) "брюки превращаются . . . брюки превращаются в classЫ . . . " Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 2 hours ago, haker_fox said: Сделайте синглтон. К слову, именно такой синглтон, со статик объектом внутри функции, чуток избыточен. Там компилятор вставляет флажок, и при каждом обращении проверяет, нужно ли вызывать конструктор объекта. Если объявлять глобальную переменную, то она инициализируется в стартапе, и этой проверки не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 1 hour ago, esaulenka said: Там компилятор вставляет флажок, Да, я знаю. Но может быть это прога для QT и крутится на Core i-9. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 8 hours ago, Метценгерштейн said: m- у нас указатель, т.к. new. А как мне его глобально узнать определен или нет? Если он определяется вне всех блоков { } - значит он глобальный. Если же внутри какого-нибудь блока - в теле функции, цикла, условного оператора и т.п. - значит локальный. Область видимости в этом случае - блок. Вне его он не существует, обратиться к нему извне нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба On 3/16/2020 at 12:43 PM, Grizzly said: Если несколько файлов, где должен использоваться m, то поместить extern в заголовочный файл, который затем подключать. Идея рабочая, должно быть, но возникла проблема- On 3/16/2020 at 12:43 PM, Grizzly said: Boo.cpp extern A* m; в классе, где мне надо это использовать, ошибка, что не видит класса error: 'А' does not name a type extern А* m; т.е. мне надо указать хидер этого класса? Но и тут не получается- в структуре файлов он лежит в ветке файлов далеко. Надо или в компилятор прописывать пути к хидеру, или как-то сразу в #include указать путь отностительный до него. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 1 час назад, Метценгерштейн сказал: Но и тут не получается- в структуре файлов он лежит в ветке файлов далеко. Надо или в компилятор прописывать пути к хидеру, или как-то сразу в #include указать путь отностительный до него. Разумеется, объявление должно быть видно. Ну так пропишите путь до нужно директории в вашей IDE или же в самом файле, где объявляете через extern. Это же обычная практика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 6 hours ago, Метценгерштейн said: . . . Но и тут не получается- в структуре файлов он лежит в ветке файлов далеко. Надо или в компилятор прописывать пути к хидеру, или как-то сразу в #include указать путь отностительный до него. В своих #include xxxxx как правило прописывать путь ни абсолютный, ни относительный, не бывает необходимости. Смотрите опции проекта (IDE) или переменные среды, там должны быть указаны стандартные пути "обхода" для поиска include. Их можно прописать достаточно много (зависит от среды). Есть макро-переменные (зависит от производителя IDE), вроед "$CURRENT_DIR", "$PROJECT_DIR", "$OUTPUT_DIR" итп. Они могут использоваться в задании путей поиска итд. Порядок перечисления этих путей может иметь значение. (повтор) ps "лежит далеко" - надо учитывать "цепочечное" (иерархическое) включение по #include. Если в сложном, наследуемом, классе каждый класс будет объявляться с инклудами "родителей", то у пра-пра-. . .-внучика в заголовке должен быть только его инкулд "включающий" его "родителя", но не всех "пра-отцов" ps-ps "Авраам родил Исаака; Исаак родил Иакова; Иаков родил Иуду и братьев его." Не надо ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 9 hours ago, Метценгерштейн said: Надо или в компилятор прописывать пути к хидеру Если собираете проект в IDE, то в настройках проекта должны быть перечислены пути ко всем папкам, где препроцессор должен будет искать хидеры. В Keil это называется Include Paths. В IAR - Additional include directories. Пути прописываются, как правило, относительные - т.е. относительно папки с проектом. Так проект получается переносимым и независимым от места расположения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться