2015-04-17 42 views
0

我試圖創建一個結構數組並提示用戶分別填充其字段。結構失敗的Matlab數組

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

但我不斷收到同樣的錯誤一段原因。

任何想法我做錯了,將不勝感激。謝謝。

回答

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的文件,在您的工作目錄或當前MATLAB路徑中聲明。

此外,@excaza注意到,錯誤是由於不正確的情況。你可能有一個文件或變量或者某個地方叫Struct(有一個大寫的S),你需要刪除它。

嘗試通過執行clear all;來清除工作區,然後再次嘗試您的代碼。另外,確保在MATLAB的系統路徑的工作目錄中沒有一個名爲struct.m的文件。試着做which struct,看看你在命令提示符中得到了什麼。您應該看到它是內置的,它會將您引導至matlab/datatypes/struct文件夾。如果沒有,那麼去MATLAB指向你的地方,而不是原生MATLAB文件夾並刪除那個文件。

+0

沒有。我的文件現在保存爲「書籍」。它不斷拋出該錯誤。 – iksimen

+1

是你的代碼'函數struct'的第一行,還是這種性質的東西?那個錯誤還是很清楚的。 MATLAB **認爲**你的文件叫做'struct'。嘗試**清除所有變量**並再次運行您的代碼。清除一切;'。 – rayryeng

+1

@iksimen - 我只是在我的終端上運行了這段代碼,它工作正常。有些東西在創建該文件時沒有告訴我們。你要麼放一個不好的函數聲明,要麼你的工作空間有一個名爲'struct'的變量,或者你的工作目錄或當前的MATLAB路徑中有一個名爲'struct'的文件。無論哪種方式,我沒有什麼可以複製的,因爲你沒有給我所有的東西。 – rayryeng