person ssss = { red, ali};
ssss
создается один раз в sub.cpp
и main.cpp
из-за sub.h
, включенного в любой из файлов. Инстанциация обычно идет в исходных файлах, а не в заголовочных файлах. Теперь, когда вы обращаетесь к переменным-членам объекта ssss
, компоновщик не может получить доступ к какому объекту, потому что они оба используют одну и ту же область видимости.
Решение состоит в том, чтобы иметь один глобальный экземпляр (если это то, что вам нужно), и к нему можно обращаться по разным файлам с помощью внешней связи.
main.cpp
========
#include main.h // What is main.h required for ?
#include sub.h
extern person ssss;
sub.cpp
========
#include main.h // ?!?!
#include sub.h
person ssss = { red, ali};
sub.h
=========
typedef struct{
char colour;
char name;
}person;