【问题标题】:Matlab array of struct failing结构失败的Matlab数组
【发布时间】:2015-04-17 18:26:22
【问题描述】:

我正在尝试创建一个结构数组并提示用户单独填写其字段。

book =struct('name',{''}, 'author',{''}, 'pubdate',{''}, 'price',{})
nmbr=input('enter number of books');
books = repmat(book, nmbr, 1);

for i=1:nmbr
    books(i).name = input(sprintf('enter name of book #(%d)',i), 's')
    books(i).author = input(sprintf('entre author of book #(%d)',i), 's')
    books(i).pubdate = input(sprintf('enter publication date of book #(%d)',i), 's')
    books(i).price = input(sprintf('enter price of book #(%d)',i))
end

但是,当我不断收到此错误时,我遗漏了一些东西:

??? Attempt to call constructor struct with incorrect letter case.


Error in ==> struct at 1
book =struct('name',{''}, 'author',{''}, 'pubdate',{''}, 'price',{})

我尝试以不同的方式对结构进行 declrng

book =struct('name','', 'author','', 'pubdate','', 'price','')

但由于某种原因,我不断收到同样的错误。

任何关于我做错了什么的想法将不胜感激。谢谢。

【问题讨论】:

    标签: arrays matlab struct


    【解决方案1】:

    MATLAB 非常详细且清楚地说明您在编程时遇到的错误。

    仔细检查你的错误:

    Error in ==> struct at 1
    book =struct('name',{''}, 'author',{''}, 'pubdate',{''}, 'price',{})
    

    struct at 1 表示它在名为struct 的文件的第 1 行发现了一个错误。当struct 也是创建struct 变量的方法时,您无意中将文件命名为struct.m。因此,MATLAB 感到困惑,因为 struct 有两个定义:您的文件名以及 struct 是 MATLAB 原生调用的一部分。

    您需要更改文件名并再次运行您的代码。当我这样做时,您的代码对我有用,尽管有一些不必要的输出打印。我建议您在 for 循环中的每个语句的末尾放置分号,以免分散注意力。


    如果您的文件不同,则发生以下任一情况:

    • 您的函数声明错误。您可能在代码的顶部放置了一个函数声明......类似function struct,或类似性质的东西,这就是它抱怨的原因
    • 您的工作区在某处有一个名为 struct 的变量,因此您尝试调用此变量而不是创建 struct。
    • 您在工作目录或当前 MATLAB 路径中的某处声明了一个名为 struct 的文件。

    另外,@excaza 注意到错误是由于大小写不当造成的。您可能在某处有一个文件或变量或称为Struct(大写S)的东西,您需要将其删除。

    尝试通过执行clear all; 清除您的工作区,然后再次尝试您的代码。另外,请确保 MATLAB 系统路径的工作目录中的某处没有名为 struct.m 的文件。尝试执行which struct 并查看命令提示符中的内容。您应该看到它是内置的,它会将您定向到matlab/datatypes/struct 文件夹。如果没有,请转到 MATLAB 指向的位置,而不是本地 MATLAB 文件夹并删除该文件。

    【讨论】:

    • 代码的第一行是function struct,还是类似的东西?这个错误还是很清楚的。 MATLAB 认为您的文件名为 struct。尝试清除所有变量并再次运行您的代码。做clear all;.
    • @iksimen - 我刚刚运行了这段代码,它可以工作。当您创建该文件时,您没有告诉我们一些事情。您要么放置了错误的函数声明,要么您的工作区在某处有一个名为 struct 的变量,或者您在工作目录或当前 MATLAB 路径的某处声明了一个名为 struct 的文件。无论哪种方式,我都无法复制,因为你没有给我一切。
    • @rayryeng 或在当前目录或名为struct的路径中有一个单独的文件
    • @rayryeng 好吧,更可能命名为Struct,因为它在谈论大写:p
    • 某处一定有一个类使用stackoverflow作为助教。这是第三个人做完全相同的作业。 ;)
    猜你喜欢
    • 2018-11-05
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    相关资源
    最近更新 更多