找回密码
 注册
Simdroid-非首页
查看: 203|回复: 9

欢迎讨论,程序自动生成函数,但该函数不能被后续程序调用的问题

[复制链接]
发表于 2011-5-11 15:29:50 | 显示全部楼层 |阅读模式 来自 河北廊坊
本帖最后由 feynmand 于 2011-5-12 08:32 编辑
  1. clear
  2. commandline={'function dataout=mytest(a,b)'
  3.     'dataout=a+b;'};

  4. fid = fopen('mytest.m', 'w');
  5. fprintf(fid, '%s\n',commandline{1:2});
  6. fclose(fid);

  7. mytest(2,3)
复制代码
以上的一段程序,放在m文件中直接运行会报错,说mytest文件不存在。但是如果在mytest(2,3)这里加个断点,在调试过程中运行,那么就不会报错,会得到正确的结果。为什么会这样呢?
 楼主| 发表于 2011-5-11 15:55:01 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
和qibbxxt讨论了一下,发现在mytest(2,3)前面加上open(mytest)或者which mytest.m,然后再运行就没有问题了,还有其他方法吗?另外有谁知道这是什么原理么
回复 不支持

使用道具 举报

发表于 2011-5-11 17:10:38 | 显示全部楼层 来自 黑龙江哈尔滨
这段代码在我这里运行正常。所以怀疑是操作系统的问题,如果你的操作系统是Vista或Win7,而你默认的Matlab的工作目录在C:\Program Files\下面,会出现这个问题。

因为上述操作系统,往C:\Program Files\下面写入是需要管理员权限的。当要写入mytest.m时,触发了UAC,实际保存的文件被重定向到C:\Users \用户名AppData\Local\VirtualStore中对应的目录中,而Matlab却认为成功的保存到了Matlab的工作目录中。所以当你再以默认目录调用时,就会出错。

所以,你可以试试关掉操作系统的UAC,或者指定文件保存目录,别把文件保存在系统目录下。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-5-11 19:28:32 | 显示全部楼层 来自 河北廊坊

.

本帖最后由 feynmand 于 2011-5-12 08:31 编辑

我用的是xp系统,matlab工作目录在D:\Program Files\下,没有你说的这个问题。
在命令行运行这些命令是没有问题的,你新建一个m文件,放到文件里面就会发现程序会出错的。
回复 不支持

使用道具 举报

发表于 2011-5-12 09:01:00 | 显示全部楼层 来自 北京
我用的是xp系统,matlab 2010b版本安装在E:\Matlab下,工作目录是我自己定义的
在命令行运行这些命令没有问题,新建一个m文件,放到文件里面,程序运行也没有出错

不能复现你说的现象,可能与messenger说的有点关联
回复 不支持

使用道具 举报

发表于 2011-5-12 09:08:44 | 显示全部楼层 来自 北京
本帖最后由 ljelly 于 2011-5-12 09:11 编辑
我用的是xp系统,matlab工作目录在D:\Program Files\下,没有你说的这个问题。
在命令行运行这些命令是没有问题的,你新建一个m文件,放到文件里面就会发现程序会出错的。
feynmand 发表于 2011-5-11 19:28

除此之外,你的安装路径和其它信息有何不同?
试着改变软件工作环境设置,如重启matlab, 重启电脑,工作目录下有没有汉字文件夹等
再复现一下是否会现同样的问题
应该不是matlab软件的问题
回复 不支持

使用道具 举报

发表于 2011-5-12 09:21:18 | 显示全部楼层 来自 河北廊坊
可以用
  1. rehash
复制代码
命令来刷新一下

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-5-12 10:05:35 | 显示全部楼层 来自 北京
我和feynmand还有qibbxxt的一致,各位保存到m文件运行的时候,每次运行前都把mytest文件删掉了吗?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-5-12 10:07:48 | 显示全部楼层 来自 河北廊坊
除此之外,你的安装路径和其它信息有何不同?
试着改变软件工作环境设置,如重启matlab, 重启电脑,工作目录下有没有汉字文件夹等
再复现一下是否会现同样的问题
应该不是matlab软件的问题
ljelly 发表于 2011-5-12 09:08


每次运行前得确认先把之前产生的文件删除掉
回复 不支持

使用道具 举报

发表于 2011-5-12 11:27:15 | 显示全部楼层 来自 北京
本帖最后由 ljelly 于 2011-5-12 11:42 编辑

9# feynmand

果然如此,看来是直接调用时,工作目录还没有来得及刷新,找不到这个函数文件
所以不能调用,刷新一下后就正常了

加断点或者加其他的与该文件相关的命令都可以,甚至用
  1. doc mytest
复制代码
只要给一个缓冲时间即可

我之前是先在命令窗中运行了一下,先生成mytest.m文件了,然后再存成文件运行的
此时文件已存在,所以没有出现问题,漏掉了,呵呵
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-20 15:33 , Processed in 0.048723 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表