回 帖 发 新 帖 刷新版面

主题:子程序间参数传递问题,不胜感激!

主程序运行时产生以下错误
TOTASS.OBJ : error LNK2001: unresolved external symbol _CO2@4
Debug/W70MAIN.exe : fatal error LNK1120: 1 unresolved externals

首先子程序程序TOTASS需要用到CO2的值,所以我编译了一个CO2读入子程序以备调用。在读入CO2值时,我已经定义了CO动态2数组,但是在程序TOTASS调用参数CO2时,却提示如上,怎么解决这个问题,即让主程序调用CO2时仍然认定它是数组,而不会出错。

TOTASS,CO2read均是子程序。

我是一个新手,敬请各位前辈指教,不胜感激,谢谢!

附:读入的CO2文本类型如下:
year  co2
1960  340
1961  341
1962  342
。。  。。
。。  。。
。。  。。
行数不确定

回复列表 (共14个回复)

沙发

错误提示为找不到co2函数。

板凳


可是我定义的co2是个数组啊,我用到的是co2的值,望继续赐教,谢谢。

3 楼

那你就贴相关代码吧! 按你这样说你都没有错那为什么编译器报错呢...

4 楼

贴代码看看
可能是数组没声明,类似与co2(1,1)这样的语句被认为是函数调用

5 楼


    yeg001和adda前辈说的有道理,我编的CO2读入程序如下,子程序TOTASS调用的是CO2(year),不知道有什么错误 ,请指教。


SUBROUTINE co2read

      implicit none
    
      integer i,n 
      logical alive
      
      real,allocatable:: co2(:)
    
      character buffer*2


      open (110,file = 'info.txt')
      read (110,*) buffer
    
    n = 0
    do  i = 1,10000
        read(110,*,END = 20) buffer
        n = n+1
    end do    
20    continue
    rewind(110)


    allocate (co2(n))

    read (110,*) buffer        
    do  i = 1,n
        read(110,*) buffer,co2(i)
    end do    
    close(110)
      
    end 
    
    

6 楼

CO2(year) 只是 CO2Read 子程序的局部变量,与子程序 TOTASS 毫无关系。
阁下在子程序 TOTASS 中调用的是 CO2(year),因此结果正如 4 楼 adda 所说。

7 楼

那么前辈,为了让TOTASS成功调用CO2(year),我该怎么修改CO2read程序呢?敬请指教,谢谢!

主程序运行时产生以下错误
TOTASS.OBJ : error LNK2001: unresolved external symbol _CO2@4
Debug/W70MAIN.exe : fatal error LNK1120: 1 unresolved externals

首先子程序程序TOTASS需要用到CO2的值,所以我编译了一个CO2读入子程序以备调用。在读入CO2值时,我已经定义了CO动态2数组,但是在程序TOTASS调用参数CO2时,却提示如上,怎么解决这个问题,即让主程序调用CO2时仍然认定它是数组,而不会出错。

TOTASS,CO2read均是子程序。

我是一个新手,敬请各位前辈指教,不胜感激,谢谢!

附:读入的CO2文本类型(即程序中的info.txt)如下:
year  co2
1960  340
1961  341
1962  342
。。  。。
。。  。。
。。  。。
行数不确定

8 楼

把CO2搞成模块变量吧。

9 楼


您是说利用module 命令吗?

10 楼

利用 Fortran 2003 语言新特性, allocatable 数组(元素)做实参、形参。

我来回复

您尚未登录,请登录后再回复。点此登录或注册