Справка по ошибкам переопределения классов C ++ - PullRequest
1 голос
/ 23 июня 2010

Я получаю ошибки вроде:

FxMathFunctions.h: In function 'FxInt32 IMin(FxInt32, FxInt32)':

FxMathFunctions.h:13: error: redefinition of 'FxInt32 IMin(FxInt32, FxInt32)'

FxMathFunctions.h:15: error: 'FxInt32 IMin(FxInt32, FxInt32)' previously defined here

В FxMathFunctions.h у меня есть:

11: struct FxPoint2d;
12:
13: inline FxInt32 IMin(FxInt32 i1,FxInt32 i2)
14: {
15:    if (i2 < i1) i1 = i2;
16:    return i1;
17: }

FxInt32 определен в заголовке, который я включаю как:

typedef long                FxInt32;

Я не могу решить по ошибкам, говорит ли он, что FxInt32 переопределяется или вся функция.

Как мне решить эту проблему?

ОБНОВЛЕНИЕ Я добавил номера строк выше.

Ответы [ 3 ]

1 голос
/ 23 июня 2010

Это говорит о том, что вся функция определяется дважды.

Мои психические отладочные способности говорят мне, что вы каким-то образом рекурсивно включаете этот заголовок, и этот заголовок не имеет надлежащей защиты от этого. Таким образом, встроенная функция определяется дважды.

0 голосов
/ 23 июня 2010

Трудно сказать, не зная, что находится в строках 13 и 15 файла FxMathFunctions.h. При этом имейте в виду, что в C ++ есть встроенные std::min и std::max в <algorithm>, и они работают для всех сопоставимых типов.

0 голосов
/ 23 июня 2010

Переместите определение функции в файл .cpp и просто поместите прототип в файл .h.Пусть компилятор беспокоится об оптимизации

...