Просто чтобы посмотреть, будет ли это работать (я знаю, что это ужасная форма), я полностью определил функцию в файле заголовка и сделал соответствующее декларацию для указанной функции в основной cpp-файл. Функции C++ не обязательно должны быть определены в блоке перевода, в котором они используются, поэтому заголовочные файлы - это почти полностью просто декларации (за исключением встроенных функций). Однако, когда я попытался скомпилировать этот проект, он сказал, что были нерешенные внешние.Не скомпилированы ли файлы заголовков (C++ Visual Studio 2015)
Когда я переместил все содержимое файла заголовка в исходный файл (удалив также заголовочный файл), он скомпилировал просто отлично и выполнил, как ожидалось. Итак, файлы заголовков просто не компилируются при создании проекта, или есть только некоторые исключения, о которых я не знаю?
Кроме того, даже когда я просто перехожу к свойствам заголовочного файла в проводнике свойств и устанавливаю его File Type
в C/C++ Code
и меняю его расширение на .cpp, он все равно не будет компилироваться (хотя он будет, если я просто удалю его и создать новый исходный файл, который, я думаю, является самой странной частью).
(я работаю с расширениями отключенными /Za
, если это меняет что-нибудь)
Вот файл кода
//main.cpp
void foo();
void main()
{
foo();
}
и заголовочный файл
//test.h
#include <iostream>
void foo()
{
std::cout << 'a';
}
Файлы заголовка не скомпилированы, если они не были переведены в блок трансляции с помощью предварительной обработки '# include'. Так как ваш единственный .cpp-файл не имеет такого включения, он не компилируется, и поэтому ничего не доступно для этой (и, по-видимому, единственной) единицы перевода. – WhozCraig
http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.HTML –