防止阵列从* [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)
调用它。
答
我不知道这是否是正确的,但尝试改变
FT_Thread(FT_Interface<S> *entry[N]){}
到
FT_Thread(FT_Interface<S> (*entry[N])){}
我有一种感觉,编译器认为,*指FT_Interface而不是条目。
啊,是的,就是这样。 @Xeo有没有办法获得数组地址的副本? – RedX 2011-05-17 14:35:08
@RedX:你总是可以使用&操作符来获得一个指针:'FT_Interface
*(* ptr_to_entry)[N] = &entry;' – wilx 2011-05-17 14:44:37@RedX:请参阅编辑或@wilx说的内容。 :) – Xeo 2011-05-17 15:02:03