Ich habe ein persönliches Projekt mit C++ Builder 2006 bei der Arbeit entwickelt. Jetzt möchte ich es zu Hause entwickeln, mit freien Stoffen. Also habe ich Visual Studio 2015 installiert (als zweite Wahl, da ich Codeflite + wxWidgets nicht funktionierte) und habe ein neues Projekt für die Lösung/CLR gestartet.Erste Schritte mit VS2015, mit C++. Verwalteter/nicht verwalteter Klassenfehler. Was mache ich falsch?
Aber ich hämmere meinen Kopf gegen einen Fehler. Das ist was ich habe;
cSQSequencer-Klasse, erstellt mit dem Add-> Class Wizard.
cSQSequencer.h
#pragma once
#include <string>
class cSQSequencer
{
public:
cSQSequencer();
~cSQSequencer();
std::string Name;
void Reset() {
Name="";
};
};
cSQSequencer.cpp
#include "cSQSequencer.h"
cSQSequencer::cSQSequencer()
{
}
cSQSequencer::~cSQSequencer()
{
}
Dann i eine Form haben, suchte ich einen Weg, um meine Klasse fügen Sie einige Assistenten wie Funktionen zum Hinzufügen, aber ich habe alles gefunden, also habe ich manuell die Zeilen hinzugefügt, die zu meiner Klasse gehören:
SysExExpMainForm
#pragma once
#include "cSQSequencer.h"
namespace EnsoniqSQKSSysExexporter {
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>
/// Riepilogo per SysExExpMainForm
/// </summary>
public ref class SysExExpMainForm : public System::Windows::Forms::Form
{
public:
cSQSequencer SQSeq;
SysExExpMainForm(void)
{
InitializeComponent();
//
//TODO: aggiungere qui il codice del costruttore.
//
SQSeq.Reset();
}
protected:
[ all the other code that follows.... ]
Der Fehler ist in der Zeile "cSQSequencer SQSeq;". Es heißt (mehr oder weniger, übersetzt aus dem Italienischen) "Ein Mitglied einer verwalteten Klasse kann kein nicht-verwalteter Typ sein".
Was soll ich tun? Ist das die richtige Methode zum Hinzufügen einer Klassenvariablen in einem Formular? Oder sollte ich eine andere Art von Projekt zu starten (aber dies ist die einzige, die ich gefunden, wo ich ein Formular hinzufügen können ....)
Der "Formulardesigner" ist nur für .NET-Code, der sie speichert eine separate Version für C++ zu speichern. Es gibt einen GUI-Designer (genannt "Dialog" -Editor, nicht "Forms") für natives C++, aber nicht alle Editionen haben es. C++/CLI-Formularcode kann normale C++ - Klassen verwenden, jedoch nur als Zeiger. Zum Beispiel mit [mein Smart Pointer] (http://codereview.stackexchange.com/q/1695/2150) können Sie 'clr_scoped_ptr SQSeq;' schreiben, erstellen Sie eine Instanz Ihrer Klasse im Formularkonstruktor und dann benutze es normal. –