Я новичок ie в C ++ (я пришел с C#).
У меня есть эта структура внутри пространства имен:
#pragma once
namespace utils {
struct astTime
{
int hour;
int min;
double secs;
};
double round(double number, int decPlace);
}
У меня также есть исходный файл где я реализовал round
функцию.
Чтобы использовать эту структуру в Boost Test, я определил эти два оператора в файле Boost Test (. cpp):
namespace utils {
bool operator ==(utils::astTime const &left, utils::astTime const &right)
{
return(
left.secs == right.secs
&& left.min == right.min
&& left.hour == right.hour);
}
std::ostream& operator<<(std::ostream& os, const utils::astTime& dt)
{
os << dt.hour << "h " << dt.min << "m " << dt.secs << "s" << std::endl;
return os;
}
}
Где я должен объявить эти два оператора (и как)?
Я переместил его в файл заголовка (потому что Я НЕ ЗНАЮ, ГДЕ ОБЪЯВЛЯТЬ ЭТО ), удаляя их из исходного файла буст-теста, таким образом:
#pragma once
#include <iostream>
namespace utils {
struct astTime
{
int hour;
int min;
double secs;
};
bool operator ==(utils::astTime const &left, utils::astTime const &right)
{
return(
left.secs == right.secs
&& left.min == right.min
&& left.hour == right.hour);
}
std::ostream& operator<<(std::ostream& os, const utils::astTime& dt)
{
os << dt.hour << "h " << dt.min << "m " << dt.secs << "s" << std::endl;
return os;
}
double round(double number, int decPlace);
}
И я получаю следующую ошибку:
предупреждение LNK4006: "class std :: basic_ostream> & __cdecl utils :: оператор << (класс std :: basic_ostream> &, struct utils :: astTime const &) "(?? 6utils @@ YAAAV? $basic_ostream@DU?$char_traits@D@std@@@std@@AAV12@ABUastTime@0@@Z) уже определен в Utils.obj; второе определение игнорируется