vc 에서는 이상이 없는데 g++에서 컴파일 오류가 납니다.
글쓴이: ddarkangel / 작성시간: 목, 2003/02/20 - 2:15오후
뭐가 문제인지 모르겠습니다.
어떻게 수정해야 할까요??
소스는 다음과 같습니다.
-----------------------------------------------------------------------
#include <iostream> #include <stdio.h> void fnc(); void sub(void *); template <class utype> class cls { public: cls(){ }; cls(void *ai){ printf("CLS : %x\n", ai); }; }; int main(void) { printf("main() : %x\n", fnc); sub(fnc); cls<void> ncls(fnc); // <- 이곳에서 에러가 납니다. return 0; } void sub(void *f) { printf("sub : %x\n", f); } void fnc() { printf("fnc()\n"); }
Forums:
1) void * p;2) void v;사실 2 번의 경우
1) void * p;
2) void v;
사실 2 번의 경우 instance를 만들수 없습니다.
template 안에서 2 번과 같은 instance 만들기를 하지 않을까요?
ps. 정확한 error message를 알려주세요.
---
http://coolengineer.com
관심 및 도움에 감사드립니다.에러 내용은 다음과 같습니다.
관심 및 도움에 감사드립니다.
에러 내용은 다음과 같습니다.
z.cpp: In function `int main()':
z.cpp:24: no matching function for call to `cls<void>::cls (void (&)())'
z.cpp:10: candidates are: cls<void>::cls()
z.cpp:13: cls<void>::cls(void *)
z.cpp:16: cls<void>::cls(const cls<void> &)
VC에서는 컴파일도 문제없고, 실행도 잘 됩니다.
타입 캐스팅을 해주세요.
:shock:
오류가 나는 것이 당연한 것 같은데요...void * 를 요구하는
오류가 나는 것이 당연한 것 같은데요...
void * 를 요구하는 곳에 void (*)() type을 넣은 것 같은데요..
두개는 엄연히 다른 type입니다.
fnc 가 쓰이는 곳을 (void *)func 로 casting해서 쓰는 것이 문법상 맞습니다.
좋은 방법은 아니지만요..
---
http://coolengineer.com
도움주셔서 감사합니다.제가 적은 표현은 UNIX 프로그래밍 책에서
도움주셔서 감사합니다.
제가 적은 표현은 UNIX 프로그래밍 책에서
참고한 것입니다. Visual C++ 컴파일러에서도
이상없이 컴파일 되었구요..
그런데, 일반 함수인 sub() 에는
sub(fnc); 라는 표현이 문제가 없는데,
클래스의 맴버함수에 ncls(fnc); 라는 표현은 오류인지 모르겠네요.
제가 참고한 두권의 책에 모두 같은 표현을 사용했고, Visual C++
컴파일러에서도 이상없이 컴파일 되었으니, g++ 의 문제 아닐까요?
제가 test 해본 바로는...sub(fnc);여기에서도
제가 test 해본 바로는...
sub(fnc);
여기에서도 문제가 발생하던데요...
g++ test.cc -Wall -c
-Wall 켜보시고 compile 해보심이...
---
http://coolengineer.com
네.. 잘 알겠습니다.제가 잘 모르는 부분이 많네요...더욱
네.. 잘 알겠습니다.
제가 잘 모르는 부분이 많네요...
더욱 열심히 공부해야 겠습니다.
감사합니다.
댓글 달기