Wie definiere ich einen vector in einer ref class?

Heinz Koeck 100 Ansehenspunkte
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.
26 Fragen
0 Kommentare Keine Kommentare
{count} Stimmen

Akzeptierte Antwort
  1. Dimitar Denkov (Convergys Corporation) 1,585 Ansehenspunkte Microsoft Vendor
    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

    1 Person fand diese Antwort hilfreich.
    0 Kommentare Keine Kommentare

0 zusätzliche Antworten

Sortieren nach: Sehr hilfreich

Ihre Antwort

Antworten können vom Autor der Frage als akzeptierte Antworten gekennzeichnet werden, was Benutzern hilft, die Antwort zu erkennen, die das Problem des Autors gelöst hat.