Ваше определение функции (т.е. исходный код) не должно быть в заголовке. Причина, по которой вы получаете несколько определений, заключается в том, что extern
не может преобразовать определение функции (исходный код) в объявление функции (т. Е. Просто прототип). Так что вам нужно сделать это:
util.h:
namespace Utils
{
int GetRandomBetween(int low, int high);
};
SomeSourceFile.cpp (возможно, Util.cpp):
namespace Utils
{
int GetRandomBetween(int low, int high);
{
if (low < 0 || low >= high)
return 0;
int seed = high - low;
return (rand() % seed) + low;
}
};
Кроме того, вы можете объявить функцию inline
в заголовке:
namespace Utils
{
inline int GetRandomBetween(int low, int high)
{
if (low < 0 || low >= high)
return 0;
int seed = high - low;
return (rand() % seed) + low;
}
};
Хотя вы должны использовать это только для небольших функций.