问个C++的问题# JobHunting - 待字闺中
r*l
1 楼
这里人气比CS版旺多了,而且大多是CS的,所以发在这里请教一下高人。
两个class,a和b。由于互相有指针指向对方,所以在b.h里面include了a.h,但是a.h
里面只在开头写了一句class b;而没有include b.h(a.cpp里面include了b.h)。以前
这样用了很久都没问题,但是最近碰到一个问题:
class a里面有几个函数的参数用到template,所以这几个函数的declaration和
implementation都放到了a.h里面,而这几个函数里面也用到了指向class b的指针(比
如p_b->func1();)。结果这样的程序在Windows上用Visual Studio 2010里面编译连接
都没问题,但是在Mac上用xcode编译就报错,说什么用到了incomplete type(Linux下
面似乎也报同样的错)。
应该是因为在a.h里面放了函数的implementation导致的。尝试将implementation拿到a
.cpp里面,结果又link出错。网上搜了一下发现这种用到template的函数,做常见的做
法就是把implementation也放到.h文件里。有人给了几种放到.cpp里的方法,但是本质
还是要让declaration和implementation在同一个文件里(比如同时include a.h和a.
cpp,或者在a.h末尾include a.cpp),所以还是会造成同样的错误(incomplete type)。
不知道这种情况有什么解决方法吗?Visual Studio既然能过,xcode能否有什么参数可
以build成功?
============
http://stackoverflow.com/questions/12924443/how-to-use-forward-
我贴了code在上面的网页,这样可能说得更清楚些。
两个class,a和b。由于互相有指针指向对方,所以在b.h里面include了a.h,但是a.h
里面只在开头写了一句class b;而没有include b.h(a.cpp里面include了b.h)。以前
这样用了很久都没问题,但是最近碰到一个问题:
class a里面有几个函数的参数用到template,所以这几个函数的declaration和
implementation都放到了a.h里面,而这几个函数里面也用到了指向class b的指针(比
如p_b->func1();)。结果这样的程序在Windows上用Visual Studio 2010里面编译连接
都没问题,但是在Mac上用xcode编译就报错,说什么用到了incomplete type(Linux下
面似乎也报同样的错)。
应该是因为在a.h里面放了函数的implementation导致的。尝试将implementation拿到a
.cpp里面,结果又link出错。网上搜了一下发现这种用到template的函数,做常见的做
法就是把implementation也放到.h文件里。有人给了几种放到.cpp里的方法,但是本质
还是要让declaration和implementation在同一个文件里(比如同时include a.h和a.
cpp,或者在a.h末尾include a.cpp),所以还是会造成同样的错误(incomplete type)。
不知道这种情况有什么解决方法吗?Visual Studio既然能过,xcode能否有什么参数可
以build成功?
============
http://stackoverflow.com/questions/12924443/how-to-use-forward-
我贴了code在上面的网页,这样可能说得更清楚些。