2018年12月30日

[C++] What and How: error: request for member '...' in '...', which is of non-class type '...'

簡單來說,就是物件宣告跟函示宣告混在一起了看起來很像,所以有時候 compiler 會搞錯
以下面的例子來說 (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,所以也沒問題。

沒有留言:

張貼留言