Классы и структуры по сути являются синонимами в C ++;они могут иметь функции, конструкторы, деструкторы, операторные перегрузки, наследование, друзей и т. д. Единственное отличие - доступ по умолчанию (private
против public
соответственно) и тип наследования по умолчанию.
Поэтому нет, они не могут иметь одно и то же имя!
И да, вы можете передать объект struct / class по значению, указателю или ссылке в функцию.