Operator= Overload 관련 질문

rymuff의 이미지

연산자= 오버로드를 통해

Flaction a;
int b;

변수 사이
a=b;
b=a;
가 가능하게 하고싶습니다.

아래와 같이 코드를 짜니
아래와 같은 에러가 발생했습니다.

static선언이나 friend같은 방법을 사용해봤지만 불가능하네요.
혹시 해결방법을 아시나요?

Flaction.h

class Flaction
{
	int c, m;
 
public: 
	...
 
	Flaction& operator =(const int& b);
	int& operator =(const Flaction& b);
 
	...
}

Flaction.cpp

	...
 
Flaction& Flaction::operator =(const int& b)
{
	c = b;
	m = 1;
 
	return *this;
}
int& Flaction::operator =(const Flaction& b)
{
	return (b.c / b.m);
 
}

error

../src/Flaction.h:36: error: 'int& Flaction::operator=(const Flaction&)' cannot be overloaded
../src/Flaction.h:33: error: with 'Flaction& Flaction::operator=(const Flaction&)'
../src/Flaction.cpp:103: error: prototype for 'int& Flaction::operator=(const Flaction&)' does not match any in class 'Flaction'
../src/Flaction.cpp:94: error: candidates are: Flaction& Flaction::operator=(const double&)
../src/Flaction.cpp:87: error:                 Flaction& Flaction::operator=(const int&)
../src/Flaction.cpp:80: error:                 Flaction& Flaction::operator=(const Flaction&)
../src/Flaction.cpp:103: error: 'int& Flaction::operator=(const Flaction&)' cannot be overloaded
../src/Flaction.cpp:80: error: with 'Flaction& Flaction::operator=(const Flaction&)'
../src/Flaction.cpp: In member function 'int& Flaction::operator=(const Flaction&)':
../src/Flaction.cpp:105: error: invalid initialization of non-const reference of type 'int&' from a temporary of type 'int'
make: *** [src/Flaction.o] Error 1
klara의 이미지

멤버함수로 이항연산자를 오버로딩하면 연산자의 좌변은 반드시 해당 클래스의 객체가 자동으로 들어갑니다.
(Flaction) = (int)의 형태라면 Flaction::operator = (int)로 대응이 가능하지만 반대는 멤버함수가 아닌 전역함수로 operator = (int, Flaction)와 같이 선언하고 정의해야합니다.

rymuff의 이미지

답변을 보고

void operator =(const int& a, const Flaction& b)
{
	a = (b.c / b.m);
}

이렇게 함수를 Flaction.h의 클래스 바깥쪽, main.cpp의 메인 위쪽에 각각 한번씩 넣어봤지만
void operator=(const int&, const Flaction&)' must be a nonstatic member function

와 같은 에러가 발생합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.