2017-10-08 114 views
-1

我有我自己的LinkedList類,當我在主要創建一個實例時,我得到「表達式必須有類型」錯誤。 我在LinkedList類中有一個默認的c'tor。錯誤 - 「表達式必須有一個類類型」-C++

所以當我試圖做到這一點:

LinkedList<Animal> aL(); 

    for (int i = 0; i < numOfAnimals; i++) 
    { 

     aL.addLast(*animals[i]); 
    } 

    cout << aL << endl; 

它不會編譯。 但如果我申報是這樣的:

LinkedList<Animal> aL = LinkedList<Animal>(); 

它的工作原理。 當然,secont選項效率不高,而我寧願使用第一個選項。 任何人都可以解釋爲什麼它不工作或如何解決它? Thnaks!

+0

這是 「最令人煩惱的解析」 –

+1

'鏈表 AL()的一個實例;' - 這是一個函數聲明。仔細看看它。 – PaulMcKenzie

+0

@VittorioRomeo據我所知,術語「最令人頭痛的解析」是指涉及這一點的更多的變化,如'A a(B());' – lisyarus

回答

1

LinkedList<Animal> aL(); 

沒有創造一個LinkedList<Animal>的實例,但聲明一個函數aL不帶參數和LinkedList<Animal>作爲它的返回類型的線。

要使用默認的構造函數創建一個對象,就是不使用任何括號:

LinkedList<Animal> aL; 

或者,如果你想是明確的,你可以使用從C++ 11

大括號
LinkedList<Animal> aL{}; 

或者,如果你喜歡函數調用語法這麼多,你可以

LinkedList<Animal> aL = LinkedList<Animal>(); 

甚至

auto aL = LinkedList<Animal>(); 
相關問題