r******l 发帖数: 10760 | 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在上面的网页,这样可能说得更清楚些。 |
l******n 发帖数: 1250 | 2 #ifndef
#define
#end
end |
r******l 发帖数: 10760 | 3 能否说详细写?
你是说加上这个两个.h就可以互相引用了吗?实际是不行啊。
【在 l******n 的大作中提到】 : #ifndef : #define : #end : end
|
l*********8 发帖数: 4642 | 4 为什么不能把那几个函数的实现从h文件移到cpp文件?
h
到a
【在 r******l 的大作中提到】 : 这里人气比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
|
r******l 发帖数: 10760 | 5 放到cpp后link错误。网上查了一下,似乎用到template的函数都要放到.h文件里面?
当然,我对template知之甚少。我把sample code贴在原贴里了,谁能帮我把它修改一
下,使之能在Mac上编译通过么?多谢!
【在 l*********8 的大作中提到】 : 为什么不能把那几个函数的实现从h文件移到cpp文件? : : : h : 到a
|
l*********8 发帖数: 4642 | 6 哦,好像是的。http://blog.csdn.net/ws84643557/article/details/7556220
【在 r******l 的大作中提到】 : 放到cpp后link错误。网上查了一下,似乎用到template的函数都要放到.h文件里面? : 当然,我对template知之甚少。我把sample code贴在原贴里了,谁能帮我把它修改一 : 下,使之能在Mac上编译通过么?多谢!
|
r******l 发帖数: 10760 | 7 Stack Overflow有人给出解决方法了。
不过我原来的code在Visual Studio里面没问题啊。严格按照C++的标准来说,是我原来
的code有问题,还是XCode有问题?谁能给仔细讲讲? |
l*********8 发帖数: 4642 | 8 哈,stack overflow上跟我想的一样。 不过我不确定是否有用。 你试了可以吗?
【在 r******l 的大作中提到】 : Stack Overflow有人给出解决方法了。 : 不过我原来的code在Visual Studio里面没问题啊。严格按照C++的标准来说,是我原来 : 的code有问题,还是XCode有问题?谁能给仔细讲讲?
|
r******l 发帖数: 10760 | 9 试过了,可以。
【在 l*********8 的大作中提到】 : 哈,stack overflow上跟我想的一样。 不过我不确定是否有用。 你试了可以吗?
|
r******l 发帖数: 10760 | 10 我原来的写法看起来不符合C++标准,但是应该更符合一般人的想法,否则VS也不会支
持我那样写了。看起来MS更为程序员着想啊,呵呵。 |
l*********8 发帖数: 4642 | 11 我感觉是你的code的问题。
【在 r******l 的大作中提到】 : Stack Overflow有人给出解决方法了。 : 不过我原来的code在Visual Studio里面没问题啊。严格按照C++的标准来说,是我原来 : 的code有问题,还是XCode有问题?谁能给仔细讲讲?
|