avatar
问个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在上面的网页,这样可能说得更清楚些。
avatar
l*n
2
#ifndef
#define
#end
end
avatar
r*l
3
能否说详细写?
你是说加上这个两个.h就可以互相引用了吗?实际是不行啊。

【在 l******n 的大作中提到】
: #ifndef
: #define
: #end
: end

avatar
l*8
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

avatar
r*l
5
放到cpp后link错误。网上查了一下,似乎用到template的函数都要放到.h文件里面?
当然,我对template知之甚少。我把sample code贴在原贴里了,谁能帮我把它修改一
下,使之能在Mac上编译通过么?多谢!

【在 l*********8 的大作中提到】
: 为什么不能把那几个函数的实现从h文件移到cpp文件?
:
:
: h
: 到a

avatar
l*8
6
哦,好像是的。http://blog.csdn.net/ws84643557/article/details/7556220

【在 r******l 的大作中提到】
: 放到cpp后link错误。网上查了一下,似乎用到template的函数都要放到.h文件里面?
: 当然,我对template知之甚少。我把sample code贴在原贴里了,谁能帮我把它修改一
: 下,使之能在Mac上编译通过么?多谢!

avatar
r*l
7
Stack Overflow有人给出解决方法了。
不过我原来的code在Visual Studio里面没问题啊。严格按照C++的标准来说,是我原来
的code有问题,还是XCode有问题?谁能给仔细讲讲?
avatar
l*8
8
哈,stack overflow上跟我想的一样。 不过我不确定是否有用。 你试了可以吗?

【在 r******l 的大作中提到】
: Stack Overflow有人给出解决方法了。
: 不过我原来的code在Visual Studio里面没问题啊。严格按照C++的标准来说,是我原来
: 的code有问题,还是XCode有问题?谁能给仔细讲讲?

avatar
r*l
9
试过了,可以。

【在 l*********8 的大作中提到】
: 哈,stack overflow上跟我想的一样。 不过我不确定是否有用。 你试了可以吗?
avatar
r*l
10
我原来的写法看起来不符合C++标准,但是应该更符合一般人的想法,否则VS也不会支
持我那样写了。看起来MS更为程序员着想啊,呵呵。
avatar
l*8
11
我感觉是你的code的问题。

【在 r******l 的大作中提到】
: Stack Overflow有人给出解决方法了。
: 不过我原来的code在Visual Studio里面没问题啊。严格按照C++的标准来说,是我原来
: 的code有问题,还是XCode有问题?谁能给仔细讲讲?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。