结构失败的matlab数组

时间:2015-04-17 18:26:22

标签: arrays matlab struct

我正在尝试创建一个struct数组,并提示用户单独填充其字段。

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',{})

我试着以不同的方式解析结构

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

但是由于某种原因我一直得到同样的错误。

任何关于我做错事的想法都会受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:2)

MATLAB对于编程时出现的错误非常详细和清晰。

仔细查看错误:

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

struct at 1表示您在文件的第1行发现了一个名为struct的错误。当struct.m也是创建struct变量的方法时,您无意中将文件命名为struct。因此,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文件夹并删除该文件。