2017-10-21 2 views
0

우선, 이것은 학업 목적을위한 것입니다. 나는 극도로 좌절했고, 나는 심지어 반나절 동안 친구와 함께이 일을 해왔다.친구 클래스 및 과부하 연산자

우리는 과부하가 걸린 운영자와 친구 클래스 모두와 협력하고있어이 실험실에서는 나를 완전히 바보 같이 느끼게했습니다. 아래에 중요한 코드를 게시 하겠지만 전체 프로젝트는 게시물 하단의 zip 파일에 있습니다. 나는 그것이 오류로 가득차 있고 이제는 (예외를 던지면서) 내 코드를 저장하는 것을 거부하고있다.

class NumDays 
{ 
private: 
    int hours; 
    double days; 

    void calcDays(int); 
public: 
    NumDays (int); 
    void setHours (int); 
    double getWork(); 
    NumDays operator+ (const NumDays &); 
    NumDays operator- (const NumDays &); 
    NumDays operator++(); 
    void operator<< (const NumDays &); 

    friend class Overtime(const NumDays &); 
}; 

초과 클래스 생성자로 객체,하지만 내 이해에서 NUMDAYS 전달 내 시도를 좋아하지 않는 것, 이것이 어떻게 내 기본 클래스의 헤더 파일 코드 초과 작업 개체는 각 NumDays 개체로 구성되기 때문에 작동해야합니다.

두 번째 문제는 오버로드 된 연산자로 인한 문제입니다.이 문제를 해결하는 데 더 어려움을 겪고 있고 더 구체적으로 구현해야하는 이유가 더 많습니다. .

그것은 확실히 < < 오버로드의 팬이 아니에요 오버로드 된 연산자를

/*overloading the + operator***************************************************/ 

NumDays NumDays::operator+ (const NumDays &right) 
{ 
    NumDays temp; 

    temp.hours = hours + right.hours; 
    return temp; 
} 

/*overloading the -operator***************************************************/ 

NumDays NumDays::operator- (const NumDays &right) 
{ 
    NumDays temp; 

    temp.hours = hours - right.hours; 
    return temp; 
} 

/*overloading the ++ operator**************************************************/ 

NumDays NumDays::operator++() 
{ 
    ++hours; 
    return *this; 
} 

/*overloading the << operator**************************************************/ 

void NumDays::operator<< (const NumDays &objOput) 
{ 
    cout << objOput.getWork << " days have been worked by this work"; 
} 

의 코드이지만, 나는 기본적으로 시도하고이 일을 내 책에서 직접 코드를 복사됩니다.

원본 코드 링크가 깨졌습니다. 여기에 영구 링크가 있습니다. http://www.mediafire.com/file/j4q3fln9a8p98ll/dayCounter.zip

또한 내 코드가 다소 수정되었습니다. 완벽하게 작동하지 않지만 컴파일되고 은 대부분입니다. http://www.mediafire.com/file/g5m21drbuab8tso/Lab5workCounter.zip

+0

'cout << objOput.getWork << "작업 일수"-'objOput.getWork'는 함수입니다. 괄호가 누락 된 것처럼 그 행에 잘못된 것이 있습니까? – PaulMcKenzie

+1

그건 '친구'선언이 작동하는 방식이 아니기 때문에 (구문 적으로나 구문 적 으로든) 당신은 필요하지 않습니다. –

+0

@ Cheersandhth.Alf와 동의하십시오. [친구 선언] (http://en.cppreference.com/w/cpp/language/friend)을 다시 살펴보십시오. –

답변

0
  1. 친구 클래스와 friend 생성자에 대한 구문이 결합 된 것처럼 보입니다. (당신의 당신이 중 하나를해야하는지 여부를 코드를 포함에서 그것은 분명하지 않다.) 당신이 하나 다음는 사업자 년 hours 멤버를 설정 할 수 없도록
  2. NumDays, 아니 기본 생성자가 없습니다.
  3. NumDays&operator++()에서 반환하십시오. (이것은 "단지"좋은 생각이며 여기서는 다른 코드 변경이 필요하지 않습니다.)
  4. 출력을 으로 정의하지 마십시오. std::ostream& 첫 번째 인수를 취해야하기 때문입니다.
  5. PaulMcKenzie의 의견에서 : ()을 메소드 호출에 입력하십시오.
  6. 의견에서 : using directive을 헤더 파일에 넣지 마십시오 (함수 또는 detail namespace 제외).
+0

안녕하세요, 정말 고맙습니다. 나는 약간의 시정을했지만 여전히 문제가있었습니다. 나는 "그대로"제출해야했지만 결국 여기에 제출할 수있는 국가가 있습니다. 나는 다소 이상하지만 일관된 행동을했습니다. 그것을 컴파일하고 내가 의미하는 바를 참조하십시오. https://1drv.ms/u/s!AtYA5536lndTgaVWVBF-Nq3Ktr0RSA –