以下面的例子來說 (line 195),如果寫成:
ListType list_t1(IntegerType());
此時 compiler 可能會把這行當成是函示宣告,list_t1 是 function name,所以要把 list_t1 當成 object 去存取 ListType 的任何成員時都會報錯。
網路上看到的解決方法簡單來說就是如果是用沒有任何參數的 default constructor,那後面不要加上 () 就好。不過這邊的例子沒辦法這樣做,解決方法只有改成下面的寫法:
ListType list_t1(IntegerType{});
對,就是用 list initialization 來明確告訴 compiler IntegerType{} 不是 function,那是個 object,這樣後面就沒有問題了。
另一個解法 (以這邊的例子來說),也可以寫成這樣:
ListType list_t1(int_type);
這邊 int_type 很明確的就是個 object,所以也沒問題。
沒有留言:
張貼留言