2011-05-17 56 views
2

我宣佈我的數組是這樣的:防止陣列從* [N]衰減到**

FT_Interface<4096> *to_make_ft[3] = { /* initialization with existing objects */ }; 

我的接口聲明如下:

template<cyg_ucount32 S, int N> 
class FT_Thread { 
    FT_Thread(FT_Interface<S> *entry[N]){} 
}; 

我這樣稱呼它(如預期with):

FT_Thread<4096, 3> ft(to_make_ft); 

然而,它抱怨指針已經衰減。

ecos/install/include/ft/thread.hxx:70: error: incompatible types in assignment of ‘FT_Interface<4096u>**’ to ‘FT_Interface<4096u>* [3]’

有什麼辦法來防止這種情況的發生?

回答

5

你需要

FT_Thread(FT_Interface<S>* (&entry)[N]){} 
//    note these ^^-----^ 

就這樣,你到了數組的引用。


編輯:當然,如果你想有一個指向數組的指針,你可以有這一點:

FT_Thread(FT_Interface<S>* (*entry)[N]){} 

雖然你需要FT_Thread<4096,3> ft(&to_make_ft)調用它。

+0

啊,是的,就是這樣。 @Xeo有沒有辦法獲得數組地址的副本? – RedX 2011-05-17 14:35:08

+0

@RedX:你總是可以使用&操作符來獲得一個指針:'FT_Interface *(* ptr_to_entry)[N] = &entry;' – wilx 2011-05-17 14:44:37

+0

@RedX:請參閱編輯或@wilx說的內容。 :) – Xeo 2011-05-17 15:02:03

1

我不知道這是否是正確的,但嘗試改變

FT_Thread(FT_Interface<S> *entry[N]){} 

FT_Thread(FT_Interface<S> (*entry[N])){} 

我有一種感覺,編譯器認爲,*指FT_Interface而不是條目。