[질문] 반환값이 int인듯합니다. 그런데 가져올수가없네요.

kddh1의 이미지

라이브러리안에 불러와야할게 있어서
간략하게하면

int a;
a=GetTickCount;
cout << a << endl;

이정도입니다만 라이브러리에서 불러오는건 함수정도라고
생각했는데...
저건 그냥 nm으로 보면 12384 T GetTickCount
이렇게 뜨네요-_-; 헤더파일에도 별다른 언급이없어서요.
불러오는방법은 안틀린것같은데...
이런 오류가 뜹니다

sample.cpp:2:invalid conversion from 'int (*)()' to 'int'

int a변수로 컨버젼할수없다는 이야기인듯한데;;
int (*)() 이게 뭔지를 모르겠네요.
저게 먼지를 알아야 같은 타입으로 선언해주던지 해서
반환값을 받아올텐데요..[/code]

익명 사용자의 이미지

a=GetTickCount(); 로 수정하시기 바랍니다.

int (*)()는 int를 반환하는 매개변수가 없는 함수를 의미합니다. 프로그래밍보다 책을 한권 먼저 보시길 권해드립니다.

kddh1의 이미지

저렇게 하면 undefined reference to 'GetTickCount()'
collect2: ld returned 1 exit status
라고 뜹니다. 물론 해당라이브러리는 링크시켰습니다.
책도 보고있긴하지만-_-;;;요... 헤더파일에도 명시되어있지 않고
저렇게 아무것도없는건 이용할수가없는걸까요..

lifthrasiir의 이미지

kddh1 wrote:
저렇게 하면 undefined reference to 'GetTickCount()'
collect2: ld returned 1 exit status
라고 뜹니다. 물론 해당라이브러리는 링크시켰습니다.
책도 보고있긴하지만-_-;;;요... 헤더파일에도 명시되어있지 않고
저렇게 아무것도없는건 이용할수가없는걸까요..

혹시 이 함수를 뜻하시는 건가요? 제가 생각하기로는 윈도우 환경에서 작업하는 걸 가정한 책을 보고 윈도우가 아닌 곳에서 컴파일하려고 하시는 것 같군요.

- 토끼군

kddh1의 이미지

물론 VC++ 과 ANSI C++이 동일하다고는 절대로 생각하지않으나
최소한 저런 함수호출정도는 같으리라 생각했는데...;;
어렵군요^^ 토끼님,손님 감사합니다.

체스맨의 이미지

Quote:

nm으로 보면 12384 T GetTickCount
sample.cpp:2:invalid conversion from 'int (*)()' to 'int'

이 말씀으로 미루어, 질문하신 분께서는 아마도 윈도에서 cygwin
을 쓰시고, windows.h 까지는 인클루드된 것 같네요. (맞나요?)

위에 손님 말씀대로 a=GetTickCount(); 이렇게 하는게 의도하시는
것일 겁니다.

invalid conversion from 'int (*)()' to 'int' 오류 메시지의 의미는
정수를 리턴하는 함수 포인터를 정수로 캐스팅 없이 변환을
시도했다는 것입니다. a=GetTickCount; 이렇게 쓰시면 함수
포인터를 정수 변수 a에 대입한 것이 되죠.

말씀하신 다음 문제만 해결되면 되는데,

Quote:

undefined reference to 'GetTickCount()'
collect2: ld returned 1 exit status

해당 라이브러리를 링크시키셨다 말씀하셨는데, 링크 옵션에 -lkernel32 하셨는지요?

Orion Project : http://orionids.org

lovewar의 이미지

kddh1 wrote:
저렇게 하면 undefined reference to 'GetTickCount()'
collect2: ld returned 1 exit status
라고 뜹니다. 물론 해당라이브러리는 링크시켰습니다.
책도 보고있긴하지만-_-;;;요... 헤더파일에도 명시되어있지 않고
저렇게 아무것도없는건 이용할수가없는걸까요..

C와 C++ 코드를 함께 사용해서 발생하는 함수이름 mangling 현상같습니다.

-- 덧붙이는 글 --
몇몇 정보를 추가로 올립니다.

http://developers.sun.com/solaris/articles/external_linkage.html

http://developers.sun.com/prodtech/cc/articles/mixing.html

체스맨의 이미지

lovewar wrote:

C와 C++ 코드를 함께 사용해서 발생하는 함수이름 mangling 현상같습니다.

컴파일러가 다음 메시지를 냈다는 것은
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

체스맨의 이미지

음... 살펴보니 name mangling 일 가능성이 더 높군요.
GetTickCount 가 DWORD ( unsigned long )을 리턴하는데
int (*)() 로 오류메시지가 나타난 것 보면 windows.h 를
인클루드 하지 않으신 것 같네요.

만일 그렇다면

extern "C" unsigned long __stdcall GetTickCount( void );

하셔야 됩니다.

혹시, nm 은 윈도에서 보시고, 윈도가 아닌시스템에서 빌드하시는
것이라면 토끼군님 말씀이 맞군요. -_-;;;

Orion Project : http://orionids.org

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.