Подключение cpp файла
Работаю в visual studio. Нашел библиотеку с большими числами:bigint, но не понимаю как ее правильно подключить и использовать. Подскажите, пожалуйста.
![]()
Ссылка которую вы дали это не библиотека а просто .cpp файл который должен компилироваться в .exe . Если вы уверены что та структура которая объявлена в этом файле это то что нужно, можно сделать так: Во первых просто скопипастить те функции которые вам нужны к себе в проект. Либо можно создать проект динамической или статической библиотеки, подключить в нее этот файл без функции main . объявления вынести в .h .
Чтобы теперь ей воспользоваться нужно указать в настройках проекта пути до инклюдов, это делается в Configuration properties->C/C++->General->Additional Include Directories. Так же указать линкеру путь до библиотеки это делается в Configuration properties->Linker->General->Additional Library Directories и в Configuration properties->Linker->Input->Additional Dependencies нужно прописать имя библиотеки которую нужно прилинковать.
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.9.4.43609
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как подключить cpp файл к проекту?
Как подключить obj файл к проекту?
Всем привет! Нужно подключить obj файл к проекту в котором есть нужный класс. Как это сделать в.
Как подключить cpp-файл к h-файлу?
как связать файл Form1.h с главным файлом проекта 1.cpp ? что то вроде того не получается.
Как подключить к проекту новый файл с функцией
Есть работающий проект на C++ (dll) Хочу в Visual Studio 2008 создать в проекте отдельный файл и в.
Сообщение от fenix117
Сообщение от fenix117
Сообщение от Nameless One
Так делать не красиво, но можно
fenix117, разбей на два файла (объявление в .h файле + определения в cpp файле) и подключив .h файл в main линкуй вместе с cpp файлом (для этого добавь его в проэкт).
Сообщение от Gepar
| Меню пользователя @ alex_x_x |
Сообщение от Gepar
Сообщение от Nameless One
Сообщение от Gepar
Сообщение от Gepar
Сообщение от Gepar
Я не знаю как сделать h файл, что в нем прописывать. Помогите плиз.
Сообщение от alex_x_x
так делать можно, но потом можно бить по пальцам
А как мне быть? Мне надо счас написать "модуль" в широком смысле этого слова.
Вот сейчас это фотоаппарат CanonEOS. Там десятки классов и подклассов. Десятки хеадеров и десятки *.cpp.
Притом экстраполируя свою жизнь со 100% вероятностью скажу что проект заброшу в дальний угол. И вернусь с
совершенно новой идеей как использовать этот фотик через 2 года. Всё что у меня будет — старый проект.
И как мне из него делать СОВЕРШЕННО новый функционал? Вручную добавлять в студию все *.cpp?
А так я сделал папку "фотик", в ней install.txt, DLL, LIB, фотик.h, CODE
A в CODE в *.h везде в конце файлов #include *.cpp
В итоге копирую через 2 года папку в новый проект. читаю что подключить и сводку как пользоватся в install.txt
и всё, фотик готов к использованию.
Мало того. Потом я захочу оформить более глобальную систему с фотиком в "модуль". По этой технологии это проще простого.
Как в Си добавлять в программу файлы с расширением h или cpp?
В Visual Studio чтоб добавить в программу файл с расширением h надо правой кнопкой кликнуть в «Обозревателе решений» по папке «Заголовочные файлы», в раскрывшемся меню выбираем » Добавить — > Создать элемент…» В открывшемся окне выбираем «Заголовочный файл (.h)», в нижней части этого окна вводим имя нашего нового файла и жмём кнопку «Добавить».
Если нужно добавить существующий файл h, то всё почти то же самое, только вместо » Добавить — > Создать элемент…» выбирайте » Добавить — > Существующий элемент…», а далее из раскывшегося окна Проводника выбираем нужный файл.
В Visual Studio чтоб добавить в программу файл с расширением cpp делаем всё как и для файлов с расширением h, только вместо «Заголовочный файл (.h)» выбираем «Файл C++ (.cpp).
Как подключить cpp файл c
Помимо файлов с исходным кодом (в языке C++ они имеют расширение cpp , а в языке C — расширение c ) в проекте могут быть заголовочные файлы (в языке C++ они имеют расширение hpp или h ). В заголовочных файлах указываются прототипы функций и различные объявления.
Для создания заголовочного файла в окне Проекты щелкаем правой кнопкой мыши на названии проекта и из контекстного меню выбираем пункт Добавить новый. В открывшемся окне (рис. 2.7) из списка слева выбираем пункт C/C++, а из списка справа — пункт Заголовочный файл C/C++. Нажимаем кнопку Выбрать. На следующем шаге (рис. 2.8) вводим название HelloWorld.hpp в поле Имя файла. В поле Путь указываем значение C:\cpp\projectsQt\HelloWorld . Нажимаем кнопку Далее. На следующем шаге (рис. 2.9) нажимаем кнопку Завершить.

Рис. 2.7. Создание заголовочного файла. Шаг 1

Рис. 2.8. Создание заголовочного файла. Шаг 2

Рис. 2.9. Создание заголовочного файла. Шаг 3
Созданный файл отобразится на вкладке Проекты и будет открыт на отдельной вкладке для редактирования. Причем внутри файла будет вставлен код, приведенный в листинге 2.2. В файл HelloWorld.pro будут добавлены следующие строки:
Листинг 2.2. Содержимое файла HelloWorld.hpp
Текст после символов // является комментарием. Инструкции, начинающиеся с символа # , — это директивы препроцессора. В нашем примере их три:
- #ifndef — проверяет отсутствие константы с именем HELLOWORLD_HPP ;
- #define — создает константу с именем HELLOWORLD_HPP ;
- #endif — обозначает конец блока проверки отсутствия константы.
Зачем нужны эти директивы препроцессора? Заголовочный файл мы подключаем к файлу с исходным кодом с помощью директивы #include :
Встретив в исходном коде директиву #include компилятор вставляет все содержимое заголовочного файла на место директивы. Если мы вставим две одинаковые директивы #include , то содержимое заголовочного файла будет вставлено дважды. Так как объявить один идентификатор (например, глобальную переменную) дважды нельзя, компилятор выведет сообщение об ошибке. Чтобы этого избежать, прототипы функций и прочие объявления вкладываются в блок, ограниченный директивами #ifndef и #endif . В директиве #ifndef указывается константа, совпадающая с названием заголовочного файла. Все буквы в имени константы заглавные, а точка заменена символом подчеркивания. Если константа не существует (при первом включении заголовочного файла так и будет), то с помощью директивы #define эта константа создается и содержимое блока вставляется в исходный код. При повторном включении заголовочного файла константа уже существует, поэтому содержимое блока будет проигнорировано. Таким образом заголовочный файл дважды вставлен не будет, а значит и ошибки не будет.
Вместо этих директив можно указать в самом начале заголовочного файла директиву препроцессора #pragma со значением once , которая также препятствует повторному включению файла (в старых компиляторах директива может не поддерживаться):
Название заголовочного файла в директиве #include может быть указано внутри угловых скобок:
или внутри кавычек:
В первом случае заголовочный файл ищется в путях поиска заголовочных файлов. При этом текущий рабочий каталог не просматривается. Добавить каталог в пути поиска заголовочных файлов позволяет флаг -I в команде компиляции. Обычно с помощью угловых скобок включаются заголовочные файлы стандартной библиотеки или библиотеки стороннего разработчика.
Во втором случае мы имеем дело с заголовочным файлом, который вначале ищется в текущем рабочем каталоге (или относительно него), а затем в путях поиска заголовочных файлов, как будто название указано внутри угловых скобок. Таким способом обычно включаются заголовочные файлы проекта.
Внимательный читатель наверняка обратил внимание на то, что файл iostream не содержит расширение. Наличие расширения файла принято в стандартной библиотеке языка C. В стандартной библиотеке языка C++ расширение файла принято не указывать. Так как язык C++ наследует все библиотеки языка C, то файлы можно подключать как в стиле языка C, так и в стиле языка C++. Например, файл string.h из стандартной библиотеки языка C доступен в языке C++ под названием cstring , а файл math.h под названием cmath . Отличие между этими способами подключения заключается в импорте идентификаторов. В языке C при подключении файла (например, math.h ) все идентификаторы импортируются в глобальное пространство имен, а в языке C++ при подключении файла (например, cmath ) идентификаторы добавляются в пространство имен под названием std . Поэтому перед идентификатором необходимо указать название пространства имен (например, std::cout ). Использование пространств имен позволяет избежать конфликта имен в программе.
Можно указать просто название заголовочного файла:
абсолютный путь к нему:
или относительный путь к нему:
Если указано только название заголовочного файла и этот файл не входит с состав проекта (или название указано внутри угловых скобок), то нужно дополнительно указать место поиска заголовочных файлов. Путь к заголовочным файлам в командной строке добавляется с помощью флага -I :
В нашем случае путь содержит пробел, поэтому весь путь указывается внутри кавычек. Если пробелов нет, то кавычки можно не указывать.

Учебник C++ (Qt Creator и MinGW) в формате PDF
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Подключение cpp файла
Работаю в visual studio. Нашел библиотеку с большими числами:bigint, но не понимаю как ее правильно подключить и использовать. Подскажите, пожалуйста.
![]()
Ссылка которую вы дали это не библиотека а просто .cpp файл который должен компилироваться в .exe . Если вы уверены что та структура которая объявлена в этом файле это то что нужно, можно сделать так: Во первых просто скопипастить те функции которые вам нужны к себе в проект. Либо можно создать проект динамической или статической библиотеки, подключить в нее этот файл без функции main . объявления вынести в .h .
Чтобы теперь ей воспользоваться нужно указать в настройках проекта пути до инклюдов, это делается в Configuration properties->C/C++->General->Additional Include Directories. Так же указать линкеру путь до библиотеки это делается в Configuration properties->Linker->General->Additional Library Directories и в Configuration properties->Linker->Input->Additional Dependencies нужно прописать имя библиотеки которую нужно прилинковать.
![]()
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ visual-studio или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.13.42356
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как подключить cpp файл c
Что нужно знать для смешивания в проекте кода C и C++? Вот несколько основных моментов (хотя некоторые производители компилятора могут этого не требовать, см. документацию на конкретный компилятор):
• Вы должны использовать компилятор C++, когда компилируете тело функции main() (например, для статической инициализации).
• Ваш компилятор C++ должен управлять процессом линковки (например, могут использоваться его специальные библиотеки).
• Ваши компиляторы C и C++ возможно должны быть от одного производителя, и иметь совместимые друг с другом версии (например, должны использовать одинаковые соглашения о вызовах функций).
Кроме того, Вам следует разобраться (см. далее), как сделать свои функции C вызываемыми из кода C++, и/или свои функции C++ вызываемыми из C.
На пути решения этой проблемы есть другой способ добиться желаемого: просто компилировать весь код (даже код в стиле C) компилятором C++. Это в значительной степени избавляет от необходимости смешивать код C и C++, и также бонусом получите некую проверку качества кода C и возможно (на что есть шанс надеяться!) обнаружить некоторые ошибки кода C. Недостаток такого решения в том, что нужно некоторым образом обновить код C, в основном по той причине, что компилятор C++ более придирчив, чем компилятор C. В результате усилия, которые надо потратить для чистки кода C (особенно актуально для больших проектов), могут оказаться больше, чем усилия на организацию смеси в проекте кода C и C++. В некоторых случаях у Вас просто может не быть выбора, например когда код на языке C поставляется из стороннего источника.
Как вызывать функцию C из C++? Просто декларируйте C-функцию в коде C++ с помощью директивы extern «C», и вызовите её (из кода C или кода C++). Пример:
Реализация функций может быть совершенно стандартная для C:
Чаще всего директива extern «C» используется в только заголовочных файлах. Чтобы сделать заголовочный файл универсальным, используют общепринятое обрамление блока декларации функций через extern «C» с помощью операторов условной компиляции, которые проверяют режим компиляции (какой используется компилятор — C++ или C).
Здесь директива условной компиляции #ifdef __cplusplus сработает, если активен компилятор C++, и будет подключен блок директивы extern «C». В случае компиляции в режиме C блок директивы extern «C» подключаться не будет.
Также имейте в виду, что действуют правила типов C++, не правила типов C. Таким образом, Вы не сможете вызвать функцию, которая определена через extern «C», с неправильным количеством аргументов. Например:
Как вызывать функцию C++ из кода C? Просто декларируйте функцию C++ с директивой extern «C» (в коде C++) и вызовите её (из кода C или C++). Пример:
Теперь функция f() может использоваться следующим образом:
В реальности это работает только для функций, которые не являются членами класса. Если Вы хотите вызвать функцию — члена класса (включая функции virtual) из C, то понадобится реализовать простую обертку. Например:
Теперь функция C::f() может быть вызвана следующим образом:
Если Вы хотите вызвать перегруженные (overloaded) функции из C, то нужно предоставить обертки с разными именами для каждой реализации перегруженной функции, чтобы их можно было использовать в коде C. Например:
Теперь разные перегрузки функции f() можно вызвать следующим образом:
Обратите внимание, что эти техники могут использоваться для вызова библиотечных функций C++ из кода C, даже если Вы не можете (или не хотите) модифицировать заголовочные файлы C++.
Как можно подключить стандартный заголовочный файл C в код C++? Для подключения стандартного хедера (такого как < cstdio>) Вы не должны делать ничего необычного. Например:
Если Вы думаете, что часть std:: в вызове std::printf() необычным, то лучшее, что следует сделать, это просто привыкнуть к этому. Другими словами, это стандартный способ использовать имена в стандартной библиотеке, так что начинайте к этому привыкать.
Однако если Вы компилируете код C компилятором C++, то скорее всего не захотите переделывать все эти вызовы из printf() в std::printf(). К счастью, в этом случае код C будет использовать заголовочный файл старого стиля < stdio.h> вместо заголовочного файла нового стиля < cstdio>, и обо всем остальном позаботится магия пространства имен (namespaces):
Последнее замечание: если у Вас есть заголовочные файлы C, которые не являются часть стандартной библиотеки, то понадобится соблюсти некоторые другие рекомендации. Могут быть два случая: либо у Вас нет возможности изменить хедер, либо Вы можете поменять хедер.
Как можно подключить не системный заголовочный файл C в код C++? Если Вы используете заголовочный файл C, который не предоставляется вместе с системой программирования, то может понадобиться сделать обрамление строки #include конструкцией блока extern «C» . Это укажет компилятору C++, что функции, декларируемые в заголовке, являются C-функциями.
Как изменить файл заголовка C, чтобы его было проще подключать в код C++? Если Вы подключаете хедер C, который не предоставляется системой программирования («нестандартный» заголовок, т. е. не относящийся к стандартной библиотеке), и если Вы можете поменять этот хедер C, то обязательно следует добавить логику extern «C» в хедер, чтобы пользователям C++ было проще подключать его в свой код C++. Поскольку компилятор C не захочет понимать конструкцию extern «C», то Вы должны обернуть строки extern «C» в условный оператор препроцессора #ifdef, чтобы они не были видны обычным компилятором C.
Шаг 1: поместите следующие строки в начало заголовочного файла C (символ __cplusplus автоматически определяется компилятором C++, компилятор C этот символ не определяет):
Шаг 2: Поместите следующие строки в конец заголовочного файла C:
После этого Вы можете свободно подключать оформленный таким образом заголовок как из кода C, так и из кода C++, не заботясь ни о каких директивах extern «C»:
К сожалению, многочисленные конструкции из условных операторов препроцессора совсем не украшают код и затрудняют его чтение, но в некоторых случаях это наименьшее зло в программировании.
Как вызывать не системную C-функцию f(int,char,float) из кода C++? Если есть отдельная C-функция, которую Вы хотите вызвать, и по какой-либо причине не хотите подключать (директивой #include) заголовочный файл C, в котором эта функция декларирована, то можно декларировать эту отдельную функцию C в коде C++, используя синтаксис extern «C». Для этого надо использовать полный прототип функции:
Несколько таких функций можно сгруппировать в блок фигурными скобками:
После этого просто вызовите функцию, как если бы это была функция C++:
Как создать C++ функцию f(int,char,float), которую можно вызывать из кода C? Компилятор C++ должен четко знать, что функция f(int,char,float) будет вызываться из кода компилятора C. Такое указание компилятору C++ делает конструкция extern «C»:
Строка extern «C» говорит компилятору C++, что информация, посылаемая линкеру, должна использовать соглашения о вызовах C, и также должна использоваться декорация имен языка C (name mangling, т. е. присоединение к имени функции префикса одиночного нижнего подчеркивания). Поскольку перегрузка имен функций не поддерживается языком C, то Вы не можете сделать некоторые перегружаемые функции одновременно вызываемыми из программы на C.
Почему линкер выдает ошибки на функции C/C++, которые вызываются из кода C++/C? Если Вы не всегда правильно используете extern «C» (если вообще делаете это), то будете иногда сталкиваться с ошибками линкера вместо ошибок компиляции, когда смешиваете код C и C++. Причина здесь в том, что фактически компиляторы C++ обычно декорируют («mangle») имена функций не так, как это делают компиляторы C, и поэтому линкер не находит ожидаемые имена в объектных или библиотечных файлах.
См. два предыдущих вопроса о том, как использовать extern «C».
Как передать объект класса C++ в функцию C и из неё? Ниже дан пример (как использовать extern «C», см. предыдущие вопросы).
Заголовочный файл Fred.h:
В отличие от кода C++, коду на C нельзя указать, что два указателя ссылаются на тот же самый объект, если указатели не будут иметь совершенно одинаковый тип. Например, на C++ просто проверить, указывает ли dp (указатель на объект производного класса Derived*) на тот же объект, что и указатель bp (указатель на объект базового класса Base*), это делается обычной проверкой if (dp == bp) . Компилятор C++ автоматически преобразует оба указателя в одинаковый тип, в этом случае к базовому типу, после чего проверит их равенство. В зависимости от подробностей реализации компилятора C++, это преобразование иногда меняет биты значения указателя.
Технический момент: большинство компиляторов C++ используют двоичную структуру объекта, которая заставляет это преобразование происходить с поддержкой множественного наследования (multiple inheritance) и/или виртуального наследования (virtual inheritance). Однако язык C++ не навязывает ограничения на реализацию этого принципа преобразования, так что оно может произойти даже с не виртуальным одиночным наследованием (non-virtual single inheritance).
Все просто: компилятор C ничего не знает о том, как сделать преобразование указателя, т. е. преобразование указателя из производного объекта в базовый. Так что преобразование должно произойти при компиляции C++, но не при компиляции C.
Важное замечание: особенно осторожным следует быть при преобразовании обоих указателей в void*, поскольку такое приведение типов не даст возможности ни компилятору C, ни компилятору C++, выполнить правильное преобразование! Сравнение (x == y) может быть false даже если (b == d) равно true:
Как было показано выше, эти преобразования указателя обычно будут происходить с множественным и/или виртуальным наследованием, однако не рассматривайте эти случаи как исчерпывающий список преобразований указателей, которые будут происходить. По крайней мере, Вас предупредили.
Если Вы все-таки очень хотите использовать указатели void*, вот безопасный способ:
Может ли моя функция C получить прямой доступ к данным объекта класса C++? Не всегда. Базовые инструкции по передаче данных объектов C++ в функцию C и из функции C см. в предыдущих вопросах.
Вы можете безопасно получить доступ к данным объекта C++ из функции C, если этот класс C++:
• Не имеет виртуальных функций (включая унаследованные виртуальные функции).
• Помещает все свои данные на одном и том же уровне доступа (private/protected/public).
• Не имеет полностью встроенных подчиненных объектов (fully-contained subobjects) с виртаульными функциями.
Если класс C++ основан на любом базовом классе (или если любые полностью встроенные подчиненные объекты основаны на базовом класса), то доступ к данным класса технически будет не портируемым, потому что двоичная структура наследуемых объектов не не определяется синтаксисом языка. Однако на практике все компиляторы C++ делают это одинаково: объект базового класса появляется первым (в порядке слева направо при событии множественного наследования), и за ним идут объекты члены класса.
Кроме того, если класс (или любой его базовый класс) содержит любые виртуальные функции, почти все компиляторы C++ помещают указатель void* в объект либо на месте первой виртуальной функции, или в самом начале объекта. Опять-таки, этот принцип не определяется языком, просто «все делают это».
Если класс имеет любые виртуальные базовые классы, то все становится еще сложнее и менее портируемо. Общая техника реализации для объектов — помещать объект виртуального базового класса (V) последним (независимо от того, где обнаруживается V как виртуальный базовый класс в иерархии наследования). Остальная часть объекта появляется в нормальном порядке. Каждый производный класс, для которого V является виртуальным базовым классом, в реальности имеет указатель на V конечного объекта.
Почему с языком C++ кажется, что я «удаляюсь от машины», в отличие от языка C? Ни почему, просто это так и есть.
Как объектно-ориентированный язык программирования, C++ позволяет Вам моделировать ситуацию в домене решаемой проблемы, что (теоретически) дает возможность программировать на языке домена проблемы, а не на языке домена вычислительной платформы и средства программирования.
Сила языка C в том, что у него фактически нет «скрытых механизмов»: что видите, то и получаете. Вы можете читать программу C и «видеть», что в ней происходит на каждом такте процессора. С языком C++ все не так; старые C-программисты (которыми почти все мы когда-то были) часто настороженно (можно даже сказать — «враждебно»?) относятся к этой особенности C++. Однако после того, как они сделали переход к объектно-ориентированному мышлению, они часто понимают, что хотя C++ скрывает многие механизмы выполнения кода от программиста, C++ также дает новый удобный уровень абстракции, экономный в выражении и снижающий усилия на поддержку кода без снижения его рабочей производительности.
В сущности Вы можете писать плохой код на любом языке; C++ не гарантирует какой-то определенный уровень качества, возможности повторного использования кода, абстракции, или любых подобных полезных «плюшек».
C++ не пытается запретить плохим программистам писать плохие программы. Вместо этого C++ дает возможность разумным разработчикам создавать превосходные программы.