2010-06-03 2 views
0

이 있어야합니다디버그 오류 : 최대이 내 코드 조합 클래스 구조체 유형

#include <iostream> 
using namespace std; 
class Sp 
{ 
private : 
    int a; 
    int b; 
public: 
    Sp(int x = 0,int y = 0) : a(x), b(y) { }; 

    int max(int x,int y); 
}; 

int Sp::max(int a,int b) { return (a > b ? a : b); }; 

int main() 
{  
    int q,q1; 
    cin >> q >>q1; 
    Sp *mm = new Sp(q,q1); 
    cout << mm.max(q,q1); 
    return 0; 
} 
+1

스트림에서 추출 할 때 추출이 성공적으로 완료되었는지 확인하기 위해 추출 후 스트림 상태 (예 :'if (! cin) {/ * do error handling * /}')를 테스트해야합니다. 추출에 실패하면 객체의 값이 변경되지 않습니다 (이 경우 객체가'q' 또는'q1'가 초기화되지 않음을 의미합니다). –

+2

필요하지 않을 때 동적으로 할당하지 마십시오. 당신은 기억을 새기고 있고, 작은 예에서도 그렇습니다. 또한, 왜 ''을 포함하고'std :: max'를 사용하지 않을까요? – GManNickG

답변

1

: mm.max(q,q1);
당신은 사용할 필요가 : mm->max(q,q1);
mm가 포인터와 같은 해결해야합니다.

Sp mm(q,q1); 
cout<< mm.max(q,q1); 

을 모두 함께 포인터를 피하기 :

는 다른 방법으로, 당신은 말할 단지 수 있습니다.

+0

고마워, 내 눈이 눈이 멀었다 고 생각해 !!! – hcemp

1

mmSp에 대한 포인터입니다; 당신은 ->하지 . 사용해야 그러나

cout << mm->max(q,q1); 

, 동적으로 어쨌든 Sp 객체를 생성하는 말도 안돼을; 왜 그냥 :

가 동적 할당을 사용하여 현재 기록되면
Sp mm(q, q1); 
cout << mm.max(q, q1); 

, 당신은 당신이 모든 -에 - 일반적인 프로그래밍 오류 인 delete를 사용하여 만든 객체를 파괴하지 않습니다. 대신