2015-04-03 3 views
0

здесь оператор-функция (inSeconds имеет тип Int)путаются операторов C++

const Time Time::operator +(const Time& t) const { 
    return Time(inSeconds_ + t.inSeconds_); 
} 

, но мне нужно также сделать этот код работать с этим оператором. (T1 является экземпляром времени и 12 представляет собой целое число), не меняя значения в порядке)

Time t(12 + t1); 

пожалуйста, помогите мне, извини, если это сделало нет смысла им новичка.

благодаря

+0

Пожалуйста, не стесняйте свои вопросы после того, как они получили хорошие ответы. –

ответ

1
  1. сделать функцию глобальной функции, а не функции-члена.
  2. Добавить конструктор в Time, который принимает в качестве аргумента int (представляя секунды).

Следующий код работает для меня:

struct Time 
{ 
    Time(int sec) : inSeconds_(sec) {} 
    int inSeconds_; 
}; 

Time operator+(Time const& lhs, Time const& rhs) 
{ 
    return Time(lhs.inSeconds_ + rhs.inSeconds_); 
} 

int main() 
{ 
    Time t1(10); 
    Time t2(12 + t1); 
} 
+0

Я бы уточнил, что вы делаете только один из них, не обязательно оба (из вашего ответа не ясно, что вам не обязательно делать то, и другое). Чтобы объяснить OP, (2) будет работать, потому что конструктор с одним аргументом (если он не помечен как «явный») становится оператором преобразования из типа аргумента в тип класса, поэтому 'Time (int)' будет неявно использоваться для преобразовать значения 'int' в объекты' Time'. – cdhowie

+0

@cdhowie, выполнение функции 'operator +' member не работает с g ++ 4.7.3. –

+0

Интересно, что я должен был сказать в любом случае, что вы * имеете *, чтобы делать (2), но * может не делать * (1) (но вы все равно должны). (1) без (2) на самом деле не решает проблему, если вы не добавите больше перегрузок. Так что игнорируй меня. :) – cdhowie

0

Что вам нужно, это свободный оператор функции.

struct Time { 
    // ... 
}; 

// note: outside the class 

Time operator+(const Time& left, const int& right) 
{ 
    return Time(/* whatever should go here */); 
} 

Всегда предпочитают писать бинарные операторы как свободные функции, которые делают свою работу с точки зрения методов полезности на классе - ваша жизнь будет проще.

Смежные вопросы