2 Stimmen

Verhindern, dass Array auf ** von *[N] zerfällt

Ich habe mein Array wie folgt deklariert:

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

meine Schnittstelle ist wie folgt deklariert:

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

Und ich nenne es (wie erwartet mit):

FT_Thread<4096, 3> ft(to_make_ft);

Dennoch beklagt er sich, dass der Zeiger verfallen ist.

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

Gibt es eine Möglichkeit, dies zu verhindern?

5voto

Xeo Punkte 126280

Sie benötigen

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

Damit erhalten Sie einen Verweis auf das Array.


編集 : Wenn Sie einen Zeiger auf das Array wollen, können Sie natürlich auch genau das haben:

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

Allerdings müssen Sie es mit FT_Thread<4096,3> ft(&to_make_ft) .

1voto

matzahboy Punkte 2966

Ich weiß nicht, ob das richtig ist, aber versuchen Sie, die

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

まで

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

Ich habe das Gefühl, dass der Compiler denkt, dass sich das * auf die FT_Interface und nicht auf den Eintrag bezieht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X