Проблема в том, что у вас есть точка с запятой после каждой строки в MsgTypes.hpp
, поэтому ваши макросы расширяются точкой с запятой после них, например:
if (false) {}
else if (...)
{ ... }; // <- !!!
else if (...)
{ ... };
Само собой разумеется, это приводит кточную ошибку компилятора, которую вы видите - перед else
.
не должно быть точки с запятой. Пусть будет известно, что вам следует избегать макросов для этого.C ++ имеет другие инструменты (например, шаблоны, полиморфизм), чтобы решить эту проблему так, чтобы люди могли ее понять.Трудность в поиске этой простой проблемы - как раз одна из причин, по которой макросы сосут.Если вы опишите, что вы действительно хотите сделать в новом вопросе, люди будут рады предложить вам варианты.