Variable de référence C ++ / CLI
Question
void f(cli::array<PointF> ^points){
PointF& a = points[0];
// and so on...
}
Erreur de compilation à la ligne 2.
.\ndPanel.cpp(52) : error C2440: 'initializing' : cannot convert from 'System::Drawing::PointF' to 'System::Drawing::PointF &'
An object from the gc heap (element of a managed array) cannot be converted to a native reference
Quel est le moyen géré pour déclarer une variable de référence?
La solution
Si vous souhaitez simplement déclarer une référence au premier PointF du tableau, vous devez utiliser un référence de suivi (%):
void f(cli::array<PointF>^ points)
{
PointF% a = points[0];
}
Autres conseils
Vous devez utiliser le modèle gcroot
du fichier vcclr.h
:
Ce sont des exemples provenant de MSDN:
// mcpp_gcroot.cpp
// compile with: /clr
#include <vcclr.h>
using namespace System;
class CppClass {
public:
gcroot<String^> str; // can use str as if it were String^
CppClass() {}
};
int main() {
CppClass c;
c.str = gcnew String("hello");
Console::WriteLine( c.str ); // no cast required
}
// mcpp_gcroot_2.cpp
// compile with: /clr
// compile with: /clr
#include <vcclr.h>
using namespace System;
struct CppClass {
gcroot<String ^> * str;
CppClass() : str(new gcroot<String ^>) {}
~CppClass() { delete str; }
};
int main() {
CppClass c;
*c.str = gcnew String("hello");
Console::WriteLine( *c.str );
}
// mcpp_gcroot_3.cpp
// compile with: /clr
#include < vcclr.h >
using namespace System;
public value struct V {
String^ str;
};
class Native {
public:
gcroot< V^ > v_handle;
};
int main() {
Native native;
V v;
native.v_handle = v;
native.v_handle->str = "Hello";
Console::WriteLine("String in V: {0}", native.v_handle->str);
}
Vous en saurez plus ici
Et voici votre code modifié pour utiliser gcroot:
void f(cli::array<gcroot<PointF ^>> points){
gcroot<PointF ^> a = points[0];
// and so on... }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow