2013-05-30 2 views
0

마우스 왼쪽 버튼을 사용하여 양식 이동을 시도하고 있습니다.^나는 포인트로 변수 mousePos을 생성 -지점 간 변환^

error C2664: 'void System::Windows::Forms::Control::Location::set(System::Drawing::Point)' : cannot convert parameter 1 from 'System::Drawing::Point ^' to 'System::Drawing::Point'

이해가 안 :

if(e->Button == Windows::Forms::MouseButtons::Left) 
{ 
    Point^ mousePos = gcnew Point(); 
    mousePos = Control::MousePosition; 
     mousePos->Offset(mouse_offset->X,mouse_offset->Y); 
    Location = mousePos; 
} 

코드 확인을 보이지만, 비주얼 반환 오류 :이 있습니다. 뭐가 잘못 됐는지 알아?

+2

"Point로 변수 mousePos를 만들었습니다 ^"- 그게 문제입니다. 이 메서드는 Point를 기대하지만 Point에 대한 포인터를 제공하고 있습니다. –

+0

@ H2CO3 : 당신이 맞았 어, 도움을 주셔서 감사합니다. –

+1

이 같은 코드를 작성할 때 더 큰 문제가 있습니다. 참조 유형 (모자를 사용하는 것)과 Point와 같은 값 유형 간의 차이를 이해하지 못합니다. 중요한 것은 * 상자 형 * 값 유형을 만드는 Point^like를 만드는 것입니다. Point에 대한 포인터가 아니라 객체 참조입니다. 너무 비효율적이며 너무 많은 경우에 불만없이 컴파일러에서 받아들입니다. 여기에 컴파일 오류가 발생하면 운이 좋다. C++/CLI에 관한 모든 책은 그 차이점을 이해하는 데 도움이 될 것입니다. –

답변

1

(Point에 대한 관리 된 포인터 - 지나치게 많은 "포인트"가 여기에 있습니다 ...)를 전달하는 반면,이 메서드는 Point을 기대합니다.

1

포인트는 값 클래스입니다 (변경할 수는 없지만). 왜 (관리되는) 힙에 하나를 할당하고 있습니까? 나는이 일을 정당화하는 것을 아무것도 보지 못했다.