[질문] 반환값이 int인듯합니다. 그런데 가져올수가없네요.
글쓴이: kddh1 / 작성시간: 금, 2005/12/09 - 6:44오후
라이브러리안에 불러와야할게 있어서
간략하게하면
int a;
a=GetTickCount;
cout << a << endl;
이정도입니다만 라이브러리에서 불러오는건 함수정도라고
생각했는데...
저건 그냥 nm으로 보면 12384 T GetTickCount
이렇게 뜨네요-_-; 헤더파일에도 별다른 언급이없어서요.
불러오는방법은 안틀린것같은데...
이런 오류가 뜹니다
sample.cpp:2:invalid conversion from 'int (*)()' to 'int'
int a변수로 컨버젼할수없다는 이야기인듯한데;;
int (*)() 이게 뭔지를 모르겠네요.
저게 먼지를 알아야 같은 타입으로 선언해주던지 해서
반환값을 받아올텐데요..[/code]
Forums:
a=GetTickCount(); 로 수정하시기 바랍니다.int (
a=GetTickCount(); 로 수정하시기 바랍니다.
int (*)()는 int를 반환하는 매개변수가 없는 함수를 의미합니다. 프로그래밍보다 책을 한권 먼저 보시길 권해드립니다.
손님 감사합니다만;;
저렇게 하면 undefined reference to 'GetTickCount()'
collect2: ld returned 1 exit status
라고 뜹니다. 물론 해당라이브러리는 링크시켰습니다.
책도 보고있긴하지만-_-;;;요... 헤더파일에도 명시되어있지 않고
저렇게 아무것도없는건 이용할수가없는걸까요..
Re: 손님 감사합니다만;;
혹시 이 함수를 뜻하시는 건가요? 제가 생각하기로는 윈도우 환경에서 작업하는 걸 가정한 책을 보고 윈도우가 아닌 곳에서 컴파일하려고 하시는 것 같군요.
- 토끼군
토끼님 말씀대로.. VC++코드에 저렇게 되어있더군요.
물론 VC++ 과 ANSI C++이 동일하다고는 절대로 생각하지않으나
최소한 저런 함수호출정도는 같으리라 생각했는데...;;
어렵군요^^ 토끼님,손님 감사합니다.
Re: 토끼님 말씀대로.. VC++코드에 저렇게 되어있더군요.
이 말씀으로 미루어, 질문하신 분께서는 아마도 윈도에서 cygwin
을 쓰시고, windows.h 까지는 인클루드된 것 같네요. (맞나요?)
위에 손님 말씀대로 a=GetTickCount(); 이렇게 하는게 의도하시는
것일 겁니다.
invalid conversion from 'int (*)()' to 'int' 오류 메시지의 의미는
정수를 리턴하는 함수 포인터를 정수로 캐스팅 없이 변환을
시도했다는 것입니다. a=GetTickCount; 이렇게 쓰시면 함수
포인터를 정수 변수 a에 대입한 것이 되죠.
말씀하신 다음 문제만 해결되면 되는데,
해당 라이브러리를 링크시키셨다 말씀하셨는데, 링크 옵션에 -lkernel32 하셨는지요?
Orion Project : http://orionids.org
Re: 손님 감사합니다만;;
C와 C++ 코드를 함께 사용해서 발생하는 함수이름 mangling 현상같습니다.
-- 덧붙이는 글 --
몇몇 정보를 추가로 올립니다.
http://developers.sun.com/solaris/articles/external_linkage.html
http://developers.sun.com/prodtech/cc/articles/mixing.html
Re: 손님 감사합니다만;;
컴파일러가 다음 메시지를 냈다는 것은
sample.cpp:2:invalid conversion from 'int (*)()' to 'int'
이미 컴파일러가 GetTickCount 의 프로토타입을 알고 있는
경우인 것 같습니다. 그렇다면 windows.h 를 인클루드 하셨을 것
같구요. 그렇지 않았다면, int a=GetTickCount; 에서 undefined
symbol 오류가 났겠죠.
그래서 제대로된 windows.h 가 인클루드 됐다면 extern "C" 가
사용되어 있을 것이므로 mangling 문제는 아닐 것으로 여겨지네요.
질문하신 분이 확인해보셔야겠죠.
Orion Project : http://orionids.org
Re: 손님 감사합니다만;;
음... 살펴보니 name mangling 일 가능성이 더 높군요.
GetTickCount 가 DWORD ( unsigned long )을 리턴하는데
int (*)() 로 오류메시지가 나타난 것 보면 windows.h 를
인클루드 하지 않으신 것 같네요.
만일 그렇다면
하셔야 됩니다.
혹시, nm 은 윈도에서 보시고, 윈도가 아닌시스템에서 빌드하시는
것이라면 토끼군님 말씀이 맞군요. -_-;;;
Orion Project : http://orionids.org
댓글 달기