Задача заголовочного файла - обеспечить самостоятельную компилируемость единицы трансляции, включающей этот заголовочный файл. Для этого в заголовочном файле должны присутствовать в первую очередь объявления разнообразных идентификаторов. Никаких "определения методов класса" или "extern данных" для этого не нужно. Поэтому никаким поиском определений заголовочный файл не занимается.
Некоторые определения в общем случае могут быть нужны для успешной компиляции единицы трансляции. Это определения типов, определения шаблонов, определения inline сущностей или сущностей с внутренним связыванием (константы, например) и пр. Такие определения будут помещаться напрямую в заголовочный файл, поэтому вопроса "поиска" таких определений не возникает.
Что касается остальных определений, задача заголовочного файла заключается только в том чтобы пообещать, что такие определения где-то существуют и описать их внешние свойства (типы переменных, списки параметров функций и т.п.). Больше от заголовочного файла ничего не требуется.
Поиск внешних определений - задача линкера. Линкер будет искать определения среди всех единиц трансляции, участвующих в сборке программы. Предоставить все необходимые данные на вход линкеру - ваша задача. Заголовочные файлы к этому процессу уже не имеют прямого (или никакого) отношения.
#include "MyClass.h"- .h файл вставляется в .h или .cpp файл. .h файл не ищет определение, определение ищет линковщик. https://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work – bob torus Jan 19 '19 at 17:51