Benutzer mit den meisten Antworten
Probleme Instanz einer Klasse in einen vector oder eine ArrayList zu befördern

Frage
-
Hallo allerseits,
ich bastle gerade an einer WinForms-Anwendung mit VC++ Express 2008. Dabei bin ich jetzt auf folgendes Problem gestossen:
Ich habe eine verwaltete Klasse erstellt (CParameter). Eine einzelne Instanz lässt sich ohne Probleme erstellen und benutzen.
Jetzt möchte ich beliebig viele Instanzen von CParameter in einen vector oder meinetwegen auch eine ArrayList stecken.
Code: private: void initializeParameterVector()
{
vector<CParameter^> parameterVector;
CParameter^ prm();
parameterVector.push_back(prm);
}
Wenn ich das jedoch probiere, erhalte ich jedoch eine Fehlermeldung:
error C2664: 'std::vector<_Ty>::push_back': Konvertierung des Parameters 1 von 'CParameter ^(__clrcall *)(void)' in 'CParameter ^const &' nicht möglich
Ich habe schon probiert prm explizit als System::Object^ zu casten, leider auch ohne Erfolg. Bei der ArrayList tritt der selbe Fehler auf.
Kann mir jemand helfen?
Danke schonmal,
PaRoX- Verschoben Martin RichterModerator Sonntag, 13. Juni 2010 16:10 (aus:Visual C++)
Antworten
-
Ich habe es mittlerweile hinbekommen - indem ich statt "std::vector" die "System::Collections::Generic::List" verwendet habe.
Vielen Dank soweit,
Raphael- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 4. Februar 2010 10:13
Alle Antworten
-
CParameter^ prm();
Ist kein Objekt. Sondern damit definierst Du eine Funktion prm, die ein CParameter^ handle zurück gibt.
CParameter^ prm = gcnew CParameter; parameterVector.push_back(prm);
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert Martin RichterModerator Mittwoch, 3. Februar 2010 11:15
- Tag als Antwort aufgehoben Martin RichterModerator Mittwoch, 3. Februar 2010 11:15
- Als Antwort vorgeschlagen Martin RichterModerator Mittwoch, 3. Februar 2010 11:15
-
Vielen Dank Martin.
Jetzt ist leider ein zweites Problem aufgetaucht. Ich habe jetzt noch den Code meiner Klasse und die komplette Fehlerbschreibung angefügt:
------ Erstellen gestartet: Projekt: Spielwiese, Konfiguration: Debug Win32 ------
Kompilieren...
Spielwiese.cpp
C:\Programme\Microsoft Visual Studio 9.0\VC\include\xmemory(52) : error C3698: "CParameter ^": Dieser Typ kann nicht als Argument von "new" verwendet werden.
Meinten Sie "CParameter" (ohne ''^'' auf oberster Ebene)?
C:\Programme\Microsoft Visual Studio 9.0\VC\include\xmemory(155): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "void std::_Construct<CParameter^,_Ty>(_T1 *,const _T2 &)".
with
[
_Ty=CParameter ^,
_T1=CParameter ^,
_T2=CParameter ^
]
C:\Programme\Microsoft Visual Studio 9.0\VC\include\xmemory(154): Bei der Kompilierung der Klassen-template der void std::allocator<_Ty>::construct(CParameter ^*,const _Ty &)-Memberfunktion
with
[
_Ty=CParameter ^
]
C:\Programme\Microsoft Visual Studio 9.0\VC\include\vector(429): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::allocator<_Ty>".
with
[
_Ty=CParameter ^
]
C:\Programme\Microsoft Visual Studio 9.0\VC\include\vector(439): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Vector_val<_Ty,_Alloc>".
with
[
_Ty=CParameter ^,
_Alloc=std::allocator<CParameter ^>
]
c:\visual studio projekte\spielwiese\spielwiese\Form1.h(360): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::vector<_Ty>".
with
[
_Ty=CParameter ^
]
C:\Programme\Microsoft Visual Studio 9.0\VC\include\xmemory(52) : error C3828: 'CParameter': Positionierungsargumente sind während des Erstellens von Instanzen von verwalteten Klassen nicht zulässig
Das Buildprotokoll wurde unter "file://c:\Visual Studio Projekte\Spielwiese\Spielwiese\Debug\BuildLog.htm" gespeichert.
Spielwiese - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
Meine Klasse:
Parameter.h
#pragma once
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::IO;
using namespace System::IO::Ports;
using namespace System::Windows;
ref class CParameter
{
public:
CParameter();
String^ strDescription;
String^ strCommand;
int* intValues;
int intLength;
void setParameter(String^ strDescr, String^ strComm, int intLgth);
};
und die Parameter.cpp :
#include "StdAfx.h"
#include "Parameter.h"
CParameter::CParameter()
{
intValues = new int[16];
}
void CParameter::setParameter(String^ strDescr, String^ strComm, int intLgth)
{
strDescription = strDescr;
strCommand = strComm;
intLength = intLgth;
} -
Ich habe es mittlerweile hinbekommen - indem ich statt "std::vector" die "System::Collections::Generic::List" verwendet habe.
Vielen Dank soweit,
Raphael- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 4. Februar 2010 10:13