Wie definiere ich einen vector in einer ref class?

Heinz Koeck 100 Zuverlässigkeitspunkte
2024-01-29T18:14:57.7166667+00:00

In einer Form1.h habe ich nach der Klassen-Definition ein 'std::vector<int> vData = {}' eingefügt. Dabei wird der Name als Fehler markiert und der Fehler lautet: "Ein Member einer verwalteten Klasse kann kein nicht verwalteter Klassentyp sein". Was mache ich da Falsch? Hier der Code-Ausschnitt:

#pragma once  
#include <vector>
#include "Header1.h"
 #include "Header2.h"
namespace CppCLRWinFormsProject 
{    
	using namespace System;   
	using namespace System::ComponentModel;   
	using namespace System::Collections;   
	using namespace System::Windows::Forms;   
	using namespace System::Data;   
	using namespace System::Drawing;    
/// <summary>   
/// Summary for Form1   
/// </summary>   
public ref class Form1 : public System::Windows::Forms::Form   
{   
public:     
std::vector<int> myArray = {};     
Form1(void)     
{       
InitializeComponent();       
//       
//TODO: Add the constructor code here       
//        
}

  
.NET
.NET
Microsoft-Technologien, die auf dem .NET-Softwareframework basieren.
15 Fragen
0 Kommentare Keine Kommentare
{count} Stimmen

Akzeptierte Antwort
  1. Dimitar Denkov (Convergys Corporation) 880 Zuverlässigkeitspunkte Microsoft-Anbieter
    2024-01-30T20:27:33.3733333+00:00

    Hallo Heinz,

    Die Deklaration als verwalteter Typ (CLR) empfiehlt sich für Mitglieder einer verwalteten Klasse immer, wenn es einen solchen Typ gibt. In Deinem Fall ist das CLR-Äquivalent zu std::vector cliext::vector : https://learn.microsoft.com/en-us/cpp/dotnet/vector-stl-clr?view=msvc-170

            #include <cliext/vector>
    

    Wenn Du dennoch den nicht verwalteten Typ in Anspruch nehmen möchtest, kannst Du einen Zeiger deklarieren, die Instanz im Konstruktor nativ initialisieren und sie im Destruktor freigeben. Ein Beispiel findest Du in diesem Thread: https://stackoverflow.com/questions/50280049/a-member-of-managed-class-cannot-be-of-a-non-managed-class-type

    Gruß, Dimitar

    Eine Person fand diese Antwort hilfreich.
    0 Kommentare Keine Kommentare

0 zusätzliche Antworten

Sortieren nach: Am hilfreichsten