Ваш заголовок определяет экземпляр class math
, названный Math
, что является плохой идеей, поскольку оно вызывает именно проблему, с которой вы столкнулись: если два файла включают заголовок, вы получаете два экземпляра с тем же именем.
Вы не можете безопасно создать экземпляр класса в заголовке, подобном этому. Вы можете объявить, что он существует, и поместить фактическое определение в исходный файл .cpp
.
Этот конкретный класс выглядит так, как будто он имеет только методы и никаких фактических данных, связанных с ним. Это заставляет меня задаться вопросом, что вы на самом деле пытаетесь сделать.Если вы просто пакетирования вверх набор функций под одним именем, вы могли бы рассмотреть namespace
вместо этого, или по крайней мере сделать функций static
методов в рамках класса:
class Math {
public:
static int add(int a, int b);
static int divide(int a, int b);
static int subtract(int a, int b);
static int multiply(int a, int b);
};
или:
namespace Math
{
int add(int a, int b);
int divide(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
}
Любой из этих вариантов избавит вас от необходимости использования экземпляра класса для доступа к функциям. Вы можете обратиться к этим функциям как Math::add()
, Math::divide()
и т. Д.