返回信息流今天在vs2012上写个代码玩儿,就是实现一个功能,把字符串转化为公式并计算出结果,比如输入“2+lg(100)*3”
便返回答案8。然后发现了一个之前没留意的问题。
我定义了两个函数,f1() 和 f2(),然后在f1()中调用 f2()。编译后报错,说 f1中“f2 identifier not found:”。我很奇怪,f2()明明定义了的呀!找错找了大半小时,才知道哪里错了。
原来我的.cpp文件写得比较大,大概600行,两个函数声明的地方离得太远了,所以调用不了。我把它们复制粘贴近一点,就成功了。感觉很黑线啊。
这是一条镜像帖。来源:北邮人论坛 / cpp / #83624同步于 2014/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
函数调用离得太远,居然会调用失败!
en911
2014/10/24镜像同步30 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
是么?cpp才600行,哪里大了?
我觉得,你应该不是 在 .h 头文件中声明, 在.cpp中定义。应该是直接在.cpp中声明定义。
那这就得了。你在f1中调用f2,你要保证在f1之前f2已经声明过了。如果你f1调用f2,f2的声明定义都在f1之后,那肯定查找不到。
解决方法 一般是,在cpp的 文件的较上方 加一句f2的声明。 或者,养成好习惯,声明都写在h文件里。不过最近我也在改,有些静态函数我也不写在h里了,在cpp上方声明。这样在h里查找接口函数简单一点。
【 在 en911 (嘻嘻哈哈) 的大作中提到: 】
今天在vs2012上写个代码玩儿,就是实现一个功能,把字符串转化为公式并计算出结果,比如输入“2+lg(100)*3”
便返回答案8。然后发现了一个之前没留意的问题。
我定义了两个函数,f1() 和 f2(),然后在f1()中调用 f2()。编译后报错,说 f1中“f2 identifier not found:”。我很奇怪,f2()明明定义了的呀!找错找了大半小时,才知道哪里错了。
原来我的.cpp文件写得比较大,大概600行,两个函数声明的地方离得太远了,所以调用不了。我把它们复制粘贴近一点,就成功了。感觉很黑线啊。
我去看了看,之前确实可能把f2的声明定义放在f1之后了,看来没有养成良好习惯啊。
我知道把f2的声明定义放在f1后面会导致出错,但我以为这时候vs2012会在调用f2时加个波浪线提醒我。我看到没有波浪线,以为f2就在f1前面...
【 在 karcy 的大作中提到: 】
: 是么?cpp才600行,哪里大了?
: 我觉得,你应该不是 在 .h 头文件中声明, 在.cpp中定义。应该是直接在.cpp中声明定义。
: 那这就得了。你在f1中调用f2,你要保证在f1之前f2已经声明过了。如果你f1调用f2,f2的声明定义都在f1之后,那肯定查找不到。
: ...................