C++ 몇 일 전부터 배우는 초보인데요..
글쓴이: espoirgod / 작성시간: 토, 2005/09/10 - 7:55오후
C 언어랑은 한동안 친하게 지내서 좀 아는 사이구요ㅎ_ㅎ;
C++ 은 이제 막 꼬시는 중입니다.
얘가 잘 넘어올지~ㅋㄷㅋㄷ
같은 클래스로 정의된 인스턴스는 멤버 변수는 따로 갖지만
멤버 함수는 공유한다고 나와있어서 확인을 하기 위해서
코딩을 했습니다. 그런데, 함수 부분의 주소를 출력하는게
마음처럼 되지 않네요.
C 에서는 다음처럼 하면 되는데..
#include <stdio.h> int main() { int (*p)(); p = main; printf("%u %u\n", *p, main); return 0; }
C++ 에서 다음처럼 하면 에러가 나네요.
int main() { test d, e; void (*dp)(), (*ep)(); dp = d.testtest; ep = e.testtest; printf("%u - %u, %u - %u\n", d.testtest, *dp, e.testtest, *ep); return 0; } a.cpp: In function `int main()': a.cpp:21: error: argument of type `void (test::)()' does not match `void (*)()' a.cpp:22: error: argument of type `void (test::)()' does not match `void (*)()' a.cpp:24: error: invalid use of member (did you forget the `&' ?) a.cpp:24: error: invalid use of member (did you forget the `&' ?)
타입이 맞지 않는다는 얘기와 유효하지 않은 멤버를 사용했다고 나오는데..
어떻게 하면 제가 원하는 목적을 달성할 수 있을까요?
참고로 www.winapi.co.kr 의 3부 C++ 문법편을 보고있어요.
>>>>>>>>>>>추가질문<<<<<<<<<<<<<
C++ 의 manpage 는 없는건가요?
man cin 이라고 입력해도 아무것도 안나와서요;
만약 있다면 manpage 를 어디서 받아야하나요?
답변 부탁드립니다.
Forums:
으음... 함수 포인터 구문인가요?[code:1]dp = d.te
으음... 함수 포인터 구문인가요?
dp = d.testtest;
여기에서 dp가 포인터고 d.testtest가 멤버 함수라면 둘의 타입이 안 맞아서 에러가 나는 듯 합니다만...
C++은 (C보다) 타입 캐스팅이 엄격합니다.
여담이지만, 굳이 저런 식으로 사용할 필요가 있을까요.
......C++ 소스 자체를 본 지가 오래 되어서 코드 전체가 이해가 안 되기도 하지만서도 말입니다. -_-;;;
//선언void (test::*pMF)();//대입pMF =
//선언
void (test::*pMF)();
//대입
pMF = &test::testtest;
//호출
(d.*pMF)();
(e.*pMF)();
그리고 멤버함수의 메모리 주소에 관해서는 g++이 말하기를,
"ISO C++ forbids taking the address of a bound member function."이라네요.
댓글 달기