防止阵列从* [N]衰减到**

问题描述:

我宣布我的数组是这样的:防止阵列从* [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]’

有什么办法来防止这种情况的发生?

你需要

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

我不知道这是否是正确的,但尝试改变

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

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

我有一种感觉,编译器认为,*指FT_Interface而不是条目。