我正在尝试创建一个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','')
但是由于某种原因我一直得到同样的错误。
任何关于我做错事的想法都会受到赞赏。谢谢。
答案 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
。struct
的文件。另外,@ excaza注意到错误是由于不正确的情况造成的。您可能在某处有一个文件或变量或名为Struct
(带有大写字母S)的东西,您需要将其删除。
尝试clear all;
清除工作区,然后再次尝试使用代码。另外,确保MATLAB系统路径的工作目录中没有名为struct.m
的文件。尝试执行which struct
并查看命令提示符中的内容。您应该看到它是内置的,它会将您引导至matlab/datatypes/struct
文件夹。如果没有,那么转到MATLAB指向的地方,而不是本机MATLAB文件夹并删除该文件。