function - 使用一个附加函数在 FORTRAN 中未定义的引用
问题描述
我在一个包含 5000 行的大文件中有以下代码。
function w_de(a)
real(dl) :: w_de, al
real(dl), intent(IN) :: a
if(.not. use_tabulated_w) then
w_de = w_lam+wa_ppf*(1._dl-a)*alfa !!! PLEASE JUST SEE THIS PART
else
al=dlog(a)
if(al.lt.a_ppf(1)) then
w_de=w_ppf(1)
elseif(al.gt.a_ppf(nw_ppf)) then
w_de=w_ppf(nw_ppf)
else
call cubicsplint(a_ppf,w_ppf,ddw_ppf,nw_ppf,al,w_de)
endif
endif
end function w_de
此代码工作正常,所有组件w_lam, wa_ppf, alfa, tabulated_w
都在 5000 行代码中的某些地方定义。在这个问题中我们不需要它们。请看w_de = w_lam...
线。
由于某些原因和一些测试问题,我将上面的代码编写为
function wq(an)
real(dl)::wq, an
wq=w_lam+wa_ppf*(1._dl-an)*alfa
end function wq
function w_de(a)
real(dl) :: w_de, al,wq
real(dl), intent(IN) :: a
if(.not. use_tabulated_w) then
w_de = wq(a) !! JUST SEE THIS PART
else
al=dlog(a)
if(al.lt.a_ppf(1)) then
w_de=w_ppf(1)
elseif(al.gt.a_ppf(nw_ppf)) then
w_de=w_ppf(nw_ppf)
else
call cubicsplint(a_ppf,w_ppf,ddw_ppf,nw_ppf,al,w_de)
endif
endif
end function w_de
但是编译第二种形式的代码会出错
/tmp/ipo_ifortqAvaYt3.o: In function `lambdageneral_mp_w_de_':
ipo_out3.f:(.text.hot00005+0xdbe): undefined reference to `wq_'
....
make: *** [camb] Error 1
我不明白是什么问题。谢谢
解决方案
推荐阅读
- r - 我们如何使用 `order()` 或替代方法在闪亮的应用程序中对 `reactiveVal` `data.frame` 进行排序?
- marklogic - 从 9.0-8 升级到 9.0-10 时不兼容?
- blockchain - 有没有可能在 Corda 中添加多个对等点?
- reactjs - 尝试使用反应制作待办事项列表
- javascript - 合并两个对象然后过滤不起作用
- apache-camel - 在骆驼版本 3 中找不到 org.apache.camel.support.processor.validation.PredicateValidatingProcessor
- php - 如何计算数组 PHP 中的出现次数?
- reactjs - 使用 Component.WrappedComponent 作为 withRouter 的替代方法测试组件在运行测试用例时显示警告
- php - AJAX/JS 表单防止 cookie 被设置
- node.js - 使用 Node.JS 下载所有匹配正则表达式的文件