2012-06-01 5 views
0

할당 연산자를 멤버 함수로 오버로드하여 문자열을 인수로 사용하여 해당 값을 A, 현재 개체에 할당하려고합니다. 아래의 의견에 오류를 게시했습니다.연산자를 오버로드하는 방법 =

누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까? 나는 그것이 매개 변수와 관련이 있으며, 아마도 정의 안에있는 코드라고 생각한다.

내가 올바르게 선언 있는지 확실하지 않습니다,하지만 나는 이런 식으로 선언 :

WORD operator=(const string& other); 

그리고 나는 이런 식으로 정의 : 도움이된다면 여기

WORD WORD::operator=(const string& other) //<---not sure if I did the parameters Correctly 
{ 
(*this) = other; 
return (*this); 
} 

전체 파일입니다 :

#include <iostream> 

using namespace std; 

#pragma once 

class alpha_numeric //node 
{ 
    public: 
char symbol; //data in node 
alpha_numeric *next;//points to next node 
}; 

class WORD 
{ 
    public: 
     WORD() : front(0) {length=0;}; //front of list initially set to Null 
     WORD(const WORD& other); 
     bool IsEmpty(); 
     int Length(); 
     void Insert(WORD bword, int position); 
     WORD operator=(const string& other); 

    private: 
     alpha_numeric *front; //points to the front node of a list 
     int length; 
}; 

WORD WORD::operator=(const string& other) //<---not sure if I did the parameters Correctly 
{ 
     (*this) = other; 
     return (*this); 
} 
+2

"읽을 수없는 혼란"을 게시하십시오. –

+0

오류 오류 LNK2005 : "public : class WORD __thiscall WORD :: operator = (클래스 std :: basic_string , 클래스 std :: allocator > const") @@ QAE? AV0 @ ABV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @D @ 2 @@ std @@@ Z) 이미 word.obj에 정의되어 있습니다. \t C : \ Users \ Mike \\ System \ Data Structures Assignment 2 \ word_driver.obj – Mike

+0

오류 오류 LNK2019 : 해결되지 않은 외부 기호 "public : __thiscall WORD :: WORD (클래스 단어 const &)"(0WORD @ @ QAE @ ABV0 @@ Z) 함수에서 참조 된 : public : class WORD __thiscall WORD :: operator = (class std :: basic_string , class std :: allocator > const " ?? 4WORD @@ QAE? AV0 @ ABV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@@ Z) \t C : \ Users \ Mike \ Desktop \ School 프로그램 \ 데이터 구조 지정 2 \ 데이터 구조 지정 2 \ word.obj – Mike

답변

1

확인 2 일 :

먼저 복사 생성자의 정의가 누락되어 컴파일되지 않습니다. 당신의 할당 연산자가 올바른지,

WORD(const WORD& other) 
: length(other.length) 
{ 
    // Construct me ! 
} 

둘째 있지만, 모든 제어 경로에 재귀 : 클래스 (도시 부분적으로 만 구현) 내부에이를보십시오. 예 : 그것은 무기한으로 호출합니다. 당신은 아마 (다시, 부분적인 구현이 표시) 메서드 내 구성원을 할당 할 :

WORD WORD::operator=(const string& other) 
{ 
    // Only copy the length, the rest is to be filled 
    this.length = other.length; 
    return (*this); 
} 

마지막으로 다른 사람이 지적한대로, 당신이 당신의 실행 파일 내부에 동일한 기호 여러 정의가 있습니다. 헤더를 단 한 번만 포함하도록 (#pragma 한 번 처리해야 함) 헤더 파일의 모든 구현 세부 사항을 소스 파일로 이동해야합니다. 예 : WORD WORD :: operator = (const string & other)의 정의를 CPP 파일로 이동하십시오.

+0

이렇게하면 A의 문자 길이가 문자열의 문자 길이와 같아지는 것입니까? 그렇다면 윌은 문자열이 무엇이든간에 A =로 만듭니다. – Mike

+0

부분적으로, 길이 구성원 만 복사합니다. 정면과 같은 다른 멤버의 복사를 구현해야합니다. 예를 들어 얕은 복사 (포인터 만 복사)를 수행하려면 다음을 수행하십시오. this.front = other.front ;. 이것이 진정한 사본을 만들지는 못할 것이라는 점에 유의하십시오. 이를 위해서는 alpha_numeric 클래스의 전체 복사본을 만들어야합니다. –

+2

prgama는 링커 오류를 해결하지 않습니다. –

1

오류 메시지는 링커에서 가져온 것입니다. 그것은 동일한 함수의 다중 정의가 발견되었음을 알려줍니다. 이는 여러 소스 파일에 포함 된 헤더 파일에서 함수를 정의했기 때문에 여러 함수 정의로 끝났기 때문입니다.

+0

다중 정의는 함수의 정의를 소스 파일로 옮기거나 정의를'inline'으로 만드는 것으로 해결할 수 있습니다 (그러나 둘 중 하나만 수행하십시오!) –

관련 문제