В дополнение к ответу jlengrands, npm start
запустит owc-dev-server
, который выполняет минимальный объем работы; это разрешит только голые модули.
Библиотека QR-кодов, которую вы пытаетесь использовать, использует commonjs, для ее преобразования потребуется немного магии, чтобы браузер мог понять этот код. Webpack-dev-server может сделать это за вас, который вы можете запустить с помощью npm run start:dev
.
Система сборки C ++ (компилятор) не знает разницы, поэтому все это одно из соглашений.
Соглашение состоит в том, что файлы .h являются объявлениями, а файлы .cpp - определениями.
Вот почему файлы .h включены #included - мы включаем объявления.
Файл .cpp является единицей компиляции: это реальный файл исходного кода, который будет скомпилирован (в C ++).
Файлы .h (заголовочные) - это файлы, которые будут виртуально копироваться / вставляться в .cpp файлы, в которых появляется инструкция прекомпилятора #include. Как только код заголовков вставлен в код .cpp, можно начинать компиляцию .cpp.
Я знаю разницу между объявлением и определением.
Принимая во внимание:
Поэтому любые определения в файле заголовка должны быть встроенным или статическим. Заголовочные файлы также содержат объявления, которые используются более чем одним файлом CPP.
Определения, которые не являются ни статическими, ни встроенными, помещаются в файлы CPP. Кроме того, любые объявления, которые необходимы только в одном файле CPP, часто помещаются внутри самого файла CPP, а не в любой (совместно используемый) файл заголовка.
.h файлы , или файлы заголовков, используются для перечисления общедоступных переменных экземпляра и методов в объявлении класса. Файлы .cpp или файлы реализации используются для фактической реализации этих методов и использования этих переменных экземпляра.
Причина, по которой они разделены, заключается в том, что файлы .h не компилируются в двоичный код, а файлы .cpp. Возьмем, к примеру, библиотеку. Скажем, вы являетесь автором и не хотите, чтобы исходный код был открытым. Таким образом, вы распространяете скомпилированную двоичную библиотеку и файлы заголовков своим клиентам. Это позволяет им легко видеть всю информацию о классах вашей библиотеки, которые они могут использовать, не имея возможности видеть, как вы реализовали эти методы. Они больше предназначены для людей, использующих ваш код, а не для компилятора. Как было сказано ранее: это условность.
Они больше предназначены для людей, использующих ваш код, а не для компилятора. Как было сказано ранее: это условность. Они больше предназначены для людей, использующих ваш код, а не для компилятора. Как было сказано ранее: это условность. Файл заголовка ( .h
, .hpp
, ...) содержит
класс X {.. .};
) inline int get_cpus () {...}
) void help ();
) extern int debug_enabled;
) Исходный файл ( .c
, .cpp
, . cxx
) содержит
void help () {...}
или void X :: f () {...}
) int debug_enabled = 1;
) Однако соглашение, согласно которому заголовки именуются суффиксом .h
, а исходным файлам присваивается имя .cpp
суффикс действительно не требуется. Хороший компилятор всегда может сказать, как обращаться с каким-либо файлом, независимо от его суффикса имени файла ( -x
для gcc. Подобно -x c ++
).
Исходные файлы будут содержать определения, которые должны присутствовать только один раз во всей программе. Поэтому, если вы куда-то включаете исходный файл, а затем связываете результат компиляции этого файла, а затем сам исходный файл, тогда, конечно, вы получите ошибки компоновщика, потому что эти определения теперь появляются дважды: один раз в включенный исходный файл, а затем в файл, который его включил. Вот почему у вас возникли проблемы с включением файла .cpp
.
Другие уже предлагали хорошие объяснения, но я подумал, что должен уточнить различия между различными расширениями:
Source Files for C: .c Header Files for C: .h Source Files for C++: .cpp Header Files for C++: .hpp
Конечно, как уже отмечалось, это всего лишь соглашения. На самом деле компилятор не обращает на них никакого внимания - это исключительно в интересах кодировщика.
Хорошее практическое правило: «.h файлы должны иметь объявления [потенциально], используемые несколькими исходными файлами , но никакого кода, который запускается. "
По соглашению, файлы .h включаются в другие файлы и никогда не компилируются сами по себе. Файлы .cpp - опять же по соглашению - являются корнями процесса компиляции; они прямо или косвенно включают файлы .h, но обычно не включают файлы .cpp.