Как подключить к проекту новый файл с функцией
Как подключить файл.сs к проекту?
как подключить файл.сs к проекту? в файле описан класс. а проект должен демонстрировать работу.
Как подключить obj файл к проекту?
Всем привет! Нужно подключить obj файл к проекту в котором есть нужный класс. Как это сделать в.
Как подключить .dll файл к проекту
Подскажите пожайлуста, как подключить библиотеку классов в виде .dll файла ? Просто я сначала.
Почетный модератор
7391 / 2637 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
так у тебя сам файл в проект добавлен? include с проектом никак не связан. Тебе нужно твой хедер и спп-файл реализации доваить к проекту, где хочешь использовать функции. Просто через контекстное меню в project explorer
2815 / 1406 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
Сообщение от nill
PS по идее не сложный вопрос но перерыл несколько книг ни как не могу найти ответ
значит плохии книжки. в нормальной книги это должно быть описано.
Сообщение от nill
#include «noviy_ fail .cpp»
вот сосбтвенно из-за fail
Сообщение от nill
но при определении функции в новом фале выскакивают ошибки из существующих файлов эту функции тоже нельзя вызвать
а ошибку привести можешь?
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
Если в VS, то правой кнопкой по проекту -> add -> New item -> source file
Регистрация: 16.08.2009
Сообщений: 434
файл я уже добавил и написал там функции
теперь я хочу связать эту функцию с уже существующим файлом .cpp
чтобы можно было ее вызывать
error C2039: ‘ima_funksii’ : is not a member of ‘noviy_fail’
c:\documents and settings\dk\рабочий стол\visual studio\’noviy_fail'(4) : see declaration of ‘noviy_fail’
error C2084: function ‘ima_funksii(int)’ already has a body
c:\documents and settings\dk\рабочий стол\visual studio\’noviy_fail'(12) : see previous definition of ‘ima_funksii’
3550 / 2655 / 327
Регистрация: 11.03.2009
Сообщений: 6,073
#include »noviy_fail.cpp» а разве можно срр файлы в инклудах объявлять?!
2815 / 1406 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
Сообщение от kazak
а разве можно срр файлы в инклудах объявлять?!
можно.. include — это фактически вставить содерживмое. Расширения — это все условности.
Регистрация: 16.08.2009
Сообщений: 434
#include не помагает идут ошибки компилятора сразу как я объявляю функцию в новом файле cpp
я даже простую переменную не могу объявить в новом файле пишет ошибку
c:\documents and settings\dk\рабочий стол\visual studio\noviy_fail.cpp(13) : error C2086: ‘int novaia_peremennaia’ : redefinition
c:\documents and settings\dk\рабочий стол\visual studio\noviy_fail.cpp.cpp(13) : see declaration of ‘novaia_peremennaia’
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
Сообщение от Monte-Cristo
можно.. include — это фактически вставить содерживмое. Расширения — это все условности.
Можно, но содержание должно соответствовать,чего у автора,видимо,не наблюдается)
nill, ты прикрепи что у тебя там есть,так непонятно. К примеру, вот это
error C2039: ‘ima_funksii’ : is not a member of ‘noviy_fail’
вообще неожидаемая ошибка в данной ситуации.
Общая рекоммендация — делай как у людей. В хедере — прототипы и #pragma once. В .cpp — реализация и он подключен к проекту. Короче, взглянуть нужно,что ты там наворотил )
Регистрация: 16.08.2009
Сообщений: 434
да я ничего не натворил просто создал пустой cpp и объявил там переменную вот и все
Если не сложно просто скажи вот я к примеру хочу объявить переменную в пустом файле cpp который создан в существующем проекте что там надо написать чтобы не было ошибок
и нужно ли еще создать файл заголовков .h с таким же именем как и у новоо файла cpp если нужно что там надо написать
если можно с примером кода
Добавлено через 4 часа 0 минут 34 секунды
в общем я создал функцю в новом файле и могу ее вызвать в этом же файле
но немогу сделать доступной эту функцию их сосднего файла тогоже проекта
#include »noviy_fail.cpp»
вызывает ошибку
надо писать полный путь (если да то в каком формате)?
или как то по другому включать один файл .сpp в другой .cpp
Добавлено через 3 часа 12 минут 14 секунд
НАШЕЛ!! что удивительно в книге по языку С
надо в файле заголовков прописать имя нужной функции и она будет доступна во всех файлах куда включен файл заголовков с помощью #include
И очень важный момент в файле заголовков функцию надо прописывать так
int veroiatno(int, int);
то есть вместо параметров надо писать тип данных который задан у переменной когда функция определялась
И отсюда вопрос это что так каждую функцию надо прописывать в файлах заголовков(расширение .h) ??
Или можно все таки как то включить отдельный файл .cpp с функциями в другой файл .cpp ??
Как подключить cpp файл c
Подключаемый файл это файл, содержащий определения функций и переменных, а также макроопределения вместе с некоторыми исходными файлами. Для использования в программе подключаемых файлов применяется директива препроцессора ‘#include’.
- Системные подключаемые файлы используются для определения интерфейсов к составляющим операционной системы. Они подключаются для предоставления объявлений и определений, требуемых для работы с системными вызовами и библиотеками.
- Подключаемые файлы пользователя содержат определения для интерфейсов между исходными файлами программы.
Обычно подключаемые файлы заканчиваются на ‘.h’ и следует избегать использования других стандартов.
Как файлы пользователя, так и системные файлы включаются в программу с использованием директивы препроцессора ‘#include’. Она имеет три модификации:
'#include '
Эта модификация используется для подключения системных файлов. При ее выполнении производится поиск файла с именем FILE в списке указанных заранее каталогов, а затем в стандартном списке системных каталогов. С помощью опции ‘-I’ указываются каталоги для поиска подключаемых файлов. Опция ‘-nostdinc’ запрещает поиск в стандартных системных каталогах и производит поиск только в указанных каталогах.
Синтаксис такой модификации директивы ‘#include’ довольно специфичен, потому как комментарии внутри ‘<. >‘ не распознаются. Поэтому в строке ‘#include *y>’ последовательность символов ‘*’ не начинает комментарий, а указанная директива включает в программу файл с именем ‘x/*y’.
Аргумент FILE не может содержать символа ‘>’, хотя он может содержать символ ‘
'#include "FILE"'
Эта модификация применяется для подключаемых файлов для программ пользователя. Сначала файл FILE просматривается в текущем каталоге, а затем в каталогах для системных подключаемых файлов. Текущим каталогом является каталог текущего обрабатываемого файла. Он просматривается в первую очередь, так как предполагается, что в нем находятся файлы, имеющие отношение к текущему обрабатываемому файлу. (Если указана опция ‘-I-‘, то текущий каталог не просматривается.)
Аргумент FILE не может содержать символов ‘»‘. Символы backslash интерпретируются как отдельные символы, а не начало escape последовательности. Таким образом, директива ‘#include «x\n\\y»‘ указывает имя файла, содержащего три символа backslash.
'#include ANYTHING ELSE'
Эта модификация называется «вычисляемой директивой #include». Любая директива ‘#include’, не соответствующая ни одной из модификаций, рассмотреных выше, является вычисляемой директивой. Строка ANYTHING ELSE проверяется на наличие соответствующего макроса, значение которого затем заменяет его название. Полученная в результате строка должна уже в точности соответствовать одной из рассмотренных выше модификаций (то есть имя подключаемого файла должно быть заключено в кавычки или угловые скобки).
Эта возможность позволяет определять макросы, что дает возможность изменять имена подключаемых файлов. Эта возможность, например, используется при переносе программ с одной операционной системы на другие, где требуются разные подключаемые файлы.
Директива ‘#include’ указывает С препроцессору обработать указанный файл перед обработкой оставшейся части текущего файла. Информация, выдаваемая препроцессором, содержит уже полученные данные, за которыми следуют данные, получаемые при обработке подключаемого файла, а за которыми, в свою очередь, следуют данные, получаемые при обработке текста, следующего после директивы ‘#include’. Например, дан следующий подключаемый файл ‘header.h’:
char *test ();
и основная программа с именем ‘program.c’, использующая этот файл.
int x; #include «header.h» main ()
Данные, полученные при обработке программы ‘program.c’ будут выглядеть следующим образом:
int x; char *test (); main ()
Для подключаемых файлов нет ограничений на объявления и макроопределения. Любой фрагмент С программы может быть включен в другой файл. Подключаемый файл может даже содержать начало выражения, заканчивающееся в исходном файле или окончание выражения, начало которого находится в исходном файле. Хотя комметарии и строковые константы не могут начинаться подключаемом файле и продолжаться в исходном файле. Не завершенный комментарий, стороковая или символьная константа в подключаемом файле приводят к возникновению ошибки в конце файла.
Подключаемый файл может содержать начало или окончание сиснтаксической конструкции, такой как определение функции.
Срока, следующая за директивой ‘#include’ всегда является пустой и добавляется С препроцессором даже если подключаемый файл не содержит завершающий символ перевода строки.
Часто случается, что подключаемый файл включает в себя другой файл. Это может привести к тому, что отдельный файл будет подключаться неоднократно, что может привести к возникновению ошибок, если файл определяет типы структур или определения типов. Поэтому следует избегать многократного подключения файлов.
Обычно это достигается путем заключения в условие всего содержимого этого файла, как показано ниже:
#ifndef FILE_FOO_SEEN #define FILE_FOO_SEEN Сам файл #endif /* FILE_FOO_SEEN */
Макрос ‘FILE_FOO_SEEN’ указывает на то, что файл уже однажды вкючался. В подключаемых файлах пользователя макрос не должен начинаться с символа ‘_’. В системных подключаемых файлах его имя не должно начинаться с символа ‘__’ во избежание возникновения конфликтов с программами пользователя. Каким бы ни был файл, имя макроса должно содержать имя файла и некоторый дополнительный текст во избежание вознкновения конфликтов с другими подключаемыми файлами.
Препроцессор GNU C построен таким образом, что обработке подключаемого файла он проверяет наличие определенных конструкций и наиболее рационально их обрабатывает. Препроцессор специально отмечает полное вложение файла в условие ‘#ifndef’. Если в подключаемом файле содержится директива ‘#include’, указывающая на обрабатываемый файл, или макрос в директиве ‘#ifndef’ уже определен, то обрабатываемый файл полностью игнорируется.
Существует также специальная директива, указывающая препроцессору, что файл должен быть включен не более одного раза. Эта директива называется ‘#pragma once’. Она использовалась в дополнение к директиве ‘#ifndef’ и в настоящее время она устарела и не должна прменяться.
В объектно ориентированном языке С существует модификация директивы ‘#include’, называемая ‘#import’, которая используется для вкючения файла не более одного раза. При использовании директивы ‘#import’ вместо ‘#include’ не требуется наличия условных оборотов для предотвращения многократной обработки файла.
«Наследование» это то, что происходит, когда какой либо объект или файл образует некоторую часть своего содержимого путем виртуального копирования из другого объекта или файла. В случае подключаемых С файлов наследование означает, что один файл включает другой файл, а затем заменяет или добавляет что-либо.
Если наследуемый подключаемый файл и основной подключаемый файл имеют различные имена, то такое наследование называется прямым. При этом используется конструкция ‘#include «BASE»‘ в наследуемом файле.
Иногда необходимо чтобы у наследуемого и основного подключаемого файла были одинаковые имена.
Например, предположим, что прикладная программа использует системный подключаемый файл ‘sys/signal.h’, но версия файла ‘/usr/include/sys/signal.h’ на данной системе выполняет того, что требуется в прикладной программе. Будет удобнее определить локальную версию, возможно с именем ‘/usr/local/include/sys/signal.h’ для замены или добавления к версии, поставляемой с системой.
Это можно выполнить с применением опции ‘-I.’ при компиляции, а также созданием файла ‘sys/signal.h’ который выполняет требуемые программе функции. Но сделать так, чтобы этот файл включал стандартный файл ‘sys/signal.h’ не так просто. При включении строки ‘#include ‘ в этот файл произойдет подключение новой версии файла, а не стандартной системной версии. Это приведет к рекурсии и ошибке при компиляции.
При использовании директивы `#include ‘ нужный файл будет найден, но этот способ является не эфективным, так как содержит полный путь к системному файлу. Это может отразиться на содержании системы, так как это означает, что любые изменения местоположения системных файлов потребуют дополнительных изменений где-либо еще.
Более эффективным решением этой проблемы является применение директивы ‘#include_next’, которая используется для подключения следующего файла с таким же именем. Эта директива функционирует также как и директива ‘#include’ за исключением поиска требуемого файла. Она начинает поиск списка каталогов подключаемых файлов после каталога, где был найден текущий файл.
Предположим была указана опция ‘-I /usr/local/include’, а список каталогов для поиска включает ‘/usr/include’. Также предположим, что оба каталога содержат файл с именем ‘sys/signal.h’. Директива ‘#include ‘ найдет нужный файл под каталогом ‘/usr/local/include’. Если этот файл содержит строку ‘#include_next ‘, то поиск будет возобновлен после предыдущего каталога и будет найден файл в каталоге ‘/usr/include’.
Как подключить cpp файл к проекту?
есть cpp файл date где описаны класс и его методы подключаю к main с помощью #include «date.cpp» выдает следующие ошибки:
Ошибка 1 error LNK2005: «public: void __thiscall Date::Read(void)» (?Read@Date@@QAEXXZ) уже определен в date.obj C:\Documents and Settings\Администратор\Мои документы\Visual Studio 2010\Projects\laba3\laba3\main.obj
Ошибка 2 error LNK2005: «public: void __thiscall Date:isplay(void)» (?Display@Date@@QAEXXZ) уже определен в date.obj C:\Documents and Settings\Администратор\Мои документы\Visual Studio 2010\Projects\laba3\laba3\main.obj
Ошибка 3 error LNK1169: обнаружен многократно определенный символ — один или более C:\Documents and Settings\Администратор\Мои документы\Visual Studio 2010\Projects\laba3\Debug\laba3.exe 1
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как подключить obj файл к проекту?
Всем привет! Нужно подключить obj файл к проекту в котором есть нужный класс. Как это сделать в.
Как подключить cpp-файл к h-файлу?
как связать файл Form1.h с главным файлом проекта 1.cpp ? что то вроде того не получается.
Как подключить к проекту новый файл с функцией
Есть работающий проект на C++ (dll) Хочу в Visual Studio 2008 создать в проекте отдельный файл и в.
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
Сообщение от fenix117
есть cpp файл date где описаны класс и его методы подключаю к main с помощью #include «date.cpp» выдает следующие ошибки
так делать нельзя. Подключаются только заголовочные файлы. Для сборки твоей программы нужно слинковать объектные файлы, полученные после компиляции *.cpp-файлов, в исполняемый модуль. В студии это делается автоматически (при учете, конечно, что эти файлы ты создал в студии, в противном случае тебе нужно добавить их в проект). А так у тебя в двух разных единицах трансляции определяется один и тот же символ, что приводит к ошибке линковки
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
Сообщение от fenix117
Ошибка 2 error LNK2005: «public: void __thiscall Date:isplay(void)» (?Display@Date@@QAEXXZ) уже определен в date.obj C:\Documents and Settings\Администратор\Мои документы\Visual Studio 2010\Projects\laba3\laba3\main.obj
Компилятор смеётся над твоей функцией.
Сообщение от Nameless One
так делать нельзя.
Так делать не красиво, но можно
fenix117, разбей на два файла (объявление в .h файле + определения в cpp файле) и подключив .h файл в main линкуй вместе с cpp файлом (для этого добавь его в проэкт).
Сообщение от Gepar
Так делать не красиво, но можно
так делать можно, но потом можно бить по пальцам
Меню пользователя @ alex_x_x |
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
Сообщение от Gepar
Так делать не красиво, но можно
Если бы можно было так делать (в общем случае), то компилятор бы не заругался. Понятное дело, что тут уже все зависит от содержимого файла, но все равно так делать не надо
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
Сообщение от Nameless One
Если бы можно было так делать (в общем случае), то компилятор бы не заругался.
В этом случае у него два раза подключается его файл (небось ifndef — endif он не использовал) либо у него ситуация такая же как была пару дней назад у меня — Проблема с линковкой когда я не мог понять почему была проблема с линковкой пока у меня всё было в одном файле. Хотя я и сейчас не понимаю почему такая проблема возникает, если кто ответит в той теме на мой вопрос — буду благодарен.
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
Сообщение от Gepar
Хотя я и сейчас не понимаю почему такая проблема возникает, если кто ответит в той теме на мой вопрос — буду благодарен.
а что, я не ответил?
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
Сообщение от Gepar
В этом случае у него два раза подключается его файл
нет, в его случае файл подключался один раз (судя по списку ошибок). Проблема была не в этом
Сообщение от Gepar
небось ifndef — endif он не использовал
нет смысла (и необходимости) использовать ifndef — endif guards в *.cpp файлах (если, конечно, тебе не взбрело в голову подключать этот файл в какой-нибудь другой препроцессорной директивой #include)
Регистрация: 16.03.2011
Сообщений: 257
Я не знаю как сделать h файл, что в нем прописывать. Помогите плиз.
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
#include #include #include using namespace std; class Date //номера месяцев в которых 30 дней if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) { if (number 30) return true; else return false; } //отдельная история с февралем //високосный год, февраль - 29 дней /*По новому стилю високосным является каждый год, число которого делится на 4 без остатка, за исключением тех годов, числа которых оканчиваются на 2 нуля, но не делятся на 400 (например, годы 1700, 1800, 1900 не являются високосными).*/ if ((year % 4) == 0) { if ((year % 100) != 0) { if (number 29) return true; else return false; } else { if ((year % 400) == 0) { if (number 29) return true; else return false; } } } //не високосный год, февраль - 28 дней if (number 28) return true; else return false; } //конструктор public: Date (){} private: Date (int number, int month, int year) { if (year > 0) this->year = year; else throw "Неправильно введен год"; if ((month > 0) && (month 12)) this->month = month; else throw "Неправильно введен месяц"; if (number_of_days_per_month(number, month, year)) this->number = number; else throw "Неправильно введено число"; } public: void Read(); void Display(); //преобразование в строку string toString() { ostringstream os; os <'.' <'.' ; return os.str(); } }; void Date::Read () { int number, month, year; bool key; do { key = false; cout <"Введите число "; cin >> number; cout <"Введите месяц "; cin >> month; cout <"введите год "; cin >> year; try { Date A(number, month, year); } catch (const char* msg) { cout ; key = true; } } while (key); this -> number = number; this -> month = month; this -> year = year; } void Date::Display () { cout <'.' <'.' ; }
Как подключить cpp файл c
Если программа содержит много кода, то более оптимально было бы разнести отдельные части кода по отдельным файлам. Например, одни функции могут храниться в одном файле исходного кода, другие функции — в другом файле.
Например, определим файл sum.cpp , который будет иметь следующий код:
int sum(int a, int b)
Это функция вычисления суммы чисел.
Добавим еще один файл — , который будет содержать объявление функции sum:
int sum(int, int);
И также определим главный файл, который назовем app.cpp :
#include #include "sum.h" // подключаем файл sum.h int main() < int result < sum(5, 4)>; std::cout #include "sum.h"
Файл sum.h еще называется заголовочным файлом (header file), так как содержит объявление, заголовок функции. ПРичем в данном случае предполагается что все файлы располагаются в одном каталоге:
Можно было бы и не подключать файл sum.h и вообще не создавать его, а объявление функции поместить непосредственно в файл app.cpp. Но при изменении функции может потребоваться изменить и ее объявление. И если функция sum используется в нескольких файлах с исходным кодом, то в каждом из этих файлов придется менять ее объявление. В данном же случае достаточно изменить объявление функции в одном файле — sum.h.
При компиляции через g++ необходимо передать все файлы через пробел компилятору:
g++ app.cpp sum.cpp -o app
То же самое верно и для компиляции через Clang::
clang++ app.cpp sum.cpp -o app.exe
На выходе будет сгенерирован единый файл app.
При работе в Visual Studio заголовочные файлы обычны помещаются в каталог «Headers»:
А при компиляции все файлы автоматически компилируются в один.