2009-11-03 6 views
1

나는 내가 원하는 몇 가지 코드에 대한 간단한 질문입니다. 기본적으로 클래스의 두 인스턴스 (금붕어) 사이의 변수를 비교하고 싶습니다. 다른 영토 안에서. 그들은 둘 다 x와 y 데이터 포인트로 구성된 포인트 클레임을 사용하는 영역 크라 이스를 가지고 있습니다. 클래스의 두 인스턴스에서 변수 비교

지금 내가 알고 호기심 이유를 아래 나던 작업하십시오

(코드의이 비트는 두 지점 비교 : 두 지점, 북쪽 동쪽 (NE)와 남서쪽으로 & B, 각각 (SW)와 이들 X 및 Y 플롯) 경우 ((A-> B- x_ne < => x_ne & & A-> B- y_ne < => NE) & & (A-> x_sw => B-> x_sw & & a-> y_sw => b-> sw)) { return true; } 그렇지 않으면 거짓을 반환합니다.

나는 (예를 들어 get location 메서드를 사용하여) 작업을 생각할 수 있으며, 본체의 함수를 사용하여 비교할 수 있지만, 알고 싶다면 - 신진 C++ 프로그래머 - 왜 또는 유사한 구현이 작동하지 않는 것처럼 보입니다.

또한 위의 작업을 수행하는 가장 깨끗하고 멋진 방법은 무엇입니까? 아마 친구 기능이 있을까요?

많은 감사

편집 :

// class point { 
// public: 
// float x; 
// float y; 

// point(float x_in, float y_in) { //the 2 arg constructor 
//  x = x_in; 
//  y = y_in; 
// } 
// }; 

// class territory { 

// private: 
// point ne, sw; 

// public: 
// territory(float x_ne, float y_ne, float x_sw, float y_sw) 
//  : ne(x_ne, y_ne), sw(x_sw,y_sw) { 
// } 


// bool contain_check(territory a, territory b) { 
// //checks if a is contained in b (in THAT order!) 

//  if ((a->x_ne <= b->x_ne && a->y_ne <= b-> ne) && 
//  (a->x_sw => b->x_sw && a->y_sw => b-> sw)) { 
//  return true; 
// } else return false; 

(희망 명확 변수을) 몇 가지 의견을 추가 ^^^^^^^^^^^^^^^^^^^^ 언뜻보기에 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

// }; 


// class goldfish { 
// protected: 
// float size; 
// point pos; 
// territory terr; 

// public: 

// goldfish(float x, float y) : pos(x,y), terr(x-1,y-1,x+1,y+1) { //constructor 
//  size = 2.3; 
// } 

// void retreat() { //what happens in the case of loss in attack 
//  /* 
//  if(goldfish.size[1] - goldfish.size[2] <= 1 && goldfish.size[1] - goldfish.size[2] > 0) { 
//  size = size - 0.2; 
//  } 
//  */ 

// } 
// void triumph() { 
// } 

// void attack() { 

// } 
// // void goldfish() 
// }; 
+1

설명 변수 이름이 좋습니다 :). 우리는 더 이상 문자가 제한되지 않습니다. 나는 a-> x_ne을 보았을 때 읽지 않았습니다. –

+0

모든 것이 주석으로 처리 된 이유는 무엇입니까? – GManNickG

+0

컴파일러 오류를 게시하면 많은 도움이됩니다. – Jonas

답변

1

"나던 일"이란 무엇을 의미합니까? 나는 컴파일하지 않습니까?

게시물에 표시된대로 contain_check이 쓰여 있다면 포인터가 아닌 곳에서 화살표 연산자를 사용하고있는 것이 문제입니다. 대신 점을 사용하십시오 :

if ((a.x_ne <= b.x_ne && a.y_ne <= b.ne) //etc. 
+0

아, 그래서 -> 우리가 포인터를 다루는 경우에만? de-referencing 때문에 가정할까요? – fishtank

+0

또한 a 및 b에는 x_ne 또는 y_ne이라는 멤버가 없습니다. –

+0

@fishtank : 더 공식적으로 연산자 ->가 정의 된 유형에만 해당됩니다. 포인터에 대해 자동으로 정의되지만 모든 클래스에서 사용자 정의 할 수도 있습니다. 이는 소위 "스마트"포인터 클래스를 작성할 때 유용합니다. –

2

: a = 연산자가 없습니다. > =

0
bool contain_check(territory a, territory b) 

영토 개체에 대한 포인터가 아니라 두 개의 영토 개체를 전달하고 있습니다. 따라서 . 연산자를 사용하여 -> 연산자 대신 멤버에 액세스하려고합니다. 뭔가 같이 : 또한

a.ne 

, 당신은 그들이 관련이없는 기능에 액세스 할 수 없습니다 즉, 비공개 nesw 멤버를 선언했습니다. contain_check() 함수에 액세스하려면 공개로 설정해야합니다.

+0

g ++ 내가 얻는 오류가 '->'의 기본 피연산자가 'territory'가 아닌 인데,이 경우에는 ->이 경우에 문제가 있다고 생각하게 만들었습니까? – fishtank

2

영토가 사각형이고 두 클래스 (ne 및 nw)의 모서리를 비교하여 겹침을 감지한다고 가정하면 선 영역이있는 북서쪽 및 북동쪽 모서리 만 확인합니다. @ Éric Malenfant가 언급했듯이, 당신은 '.'에 의해 액세스되는 클래스 멤버로서의 구조를 가지고 있습니다. 운영자. 그 회원은 ne와 sw 그래서 그들을 참조하십시오 : "a.ne.X "

그래서이 시작되는

if ((a->x_ne <= b->x_ne && a->y_ne <= b-> ne) && 
    (a->x_nw => b->x_nw && a->y_nw => b-> nw)) { 
    return true; 
    } else return false; 

변경 그것을 :

당신 :

return ( (a.ne.x <= b.ne.x && a.ne.y <= b.ne.y) 
     && (a.sw.x >= b.sw.x && a.sw.y >= b.sw.y)); 
+0

죄송합니다, 거기에 오타가 있습니다. – fishtank

0

내가 잘 오프 (:가 아닌 C++ 전문가 주) 두 가지 문제를 발견 =>에 대해 =>를 사용하십시오.

또한 b-> ne는 다음과 같아야합니다. b-> y_ne이 되십시오.

0

죄송합니다. 분명히 (매우) 혼동 스러웠습니다. 고마워! 아래 작동합니다

if ((a.ne.x <= b.ne.x && a.ne.y <= b.ne.y) && 
     (a.sw.x >= b.sw.x && a.sw.y >= b.sw.y)) { 
    return true; 
    } else return false; 
    } 
+1

if 문을 삭제하십시오. 중복됩니다. – GManNickG

0

메소드 부울 지역 :: contain_check (CONST 지역 & A, CONST 지역 & B)를; 정적으로 선언해야합니다. 말된다. 또는 클래스 영토와 아무 관련이 없으므로 독립 실행 형 함수로 작성하는 것이 좋습니다. 두 인스턴스 간의 어떤 종류의 관계를 검사합니다. 맞습니까?