• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

doSomething 함수에서

21.02.07 23:04 작성 조회수 168

1

Fraction doSomething() {

Fraction temp(2, 1);

return temp;

}

이렇게 만드셨는데 저는

Fraction doSomething() {

return Fraction temp(2, 1);

이렇게 하려고 하니까  type name is not allowed 에러가 뜨더라구요

그런데 <<생성자 오버로딩에서 

friend std::ostream& operator << (std::ostream& out, const Fraction& f) {

return out << f._numerator << " / " << f._denominator << endl;

}

이 함수는 교수님처럼 안하고 리턴에 한번에 이렇게 써줘도 문제가 없던데 앞에서는 왜 에러가 나고 여기선 문제가 없을까요?

답변 1

답변을 작성해보세요.

3

안소님의 프로필

안소

2021.02.08

안녕하세요.

질문자님은 위와 같은 형태로 리턴하려고 하신 것이나 마찬가지입니다.

리턴문 안에서는 L-value 변수를 새롭게 정의할 수 없습니다. 

따라서 리턴문안에서 Fraction temp 를 새롭게 만드시고 이를 리턴하려고 하시면 안됩니다.

이렇게 미리 a를 정의 해주시고 그 a를 리턴하셔야 해요!

아래 연산자 오버로딩도 그렇고 맨 위의 코드가 문제 없었던 이유는 기존에 이미 정의되어 있는 것을 리턴하는 것이라 문제가 없기 때문입니다.