[Compiler Error C2392]
"Methode": Covariant-Rückgabetypen werden in verwalteten Typen nicht unterstützt
Hallo miteinander,
ich versuche eine Klasse SRow, die von ArrayList erbt zu implementieren.
Dabe möchte ich die property "Item" wie folgt neu definieren (siehe dazu auskommentierten source code). Der
Compiler meldet dann die o.g. Fehlermeldung und ich kann mit dieser nichts anfangen. Ich verstehe nicht was er
damit meint.
Da mir nichts besseres eingefallen ist, habe ich anstatt die property "Item" von ArrayList zu benutzen habe ich eine
neue property "Items" definiert, diese funktioniert (keine Compilermeldungen). Aber ich würde ganz gerne, die geerbte property
Item benutzen die auf meine struct PSCell zeigt.
Wäre toll, wenn jemand eine Idee hätte oder zumindestens mir etwas genaueres über den o.g. Fehler etwas sagen könnte (die Hilfe
hat mich nicht voll aufgeklärt).
Danke
MfG
Paulo Ferreira
<PRE>
// MatLib.h
#pragma once
#include <vcclr.h>
using namespace System;
namespace MatLib
{
// Sparse matrix cell
public __gc struct PSCell : public System::Object
{
public:
int Col, Row; // location of this cell in the matrix
double Value; // value to hold in the cell
};
public __gc class SRow : public System::Collections::ArrayList
{
private:
int FRowNum;
PSCell* ACell ;
public:
SRow(int ARowNum)
{
FRowNum = ARowNum;
};
~SRow()
{
Clear();
// ??? Wird der Speicher auch freigegeben ???
// Dispose -> Methode ?
};
virtual bool Find(int ACellCol, int & Index)
{
int L, H, C, I;
bool Result = false;
L = 0;
H = Count - 1;
while(L <= H)
{
I = (L + H) >> 1;
if (Items[I]->Col < ACellCol)
{
L = I + 1;
}
else
{
H = I - 1;
if (Items[I]->Col = ACellCol)
{
Result = true;
L = I;
}
}
}
Index = I;
return Result;
};
virtual int Add(const int ACellCol, const double AValue)
{
int Result;
Find(ACellCol, Result);
// Create New Cell
ACell = new PSCell();
ACell->Value = AValue;
ACell->Col = ACellCol;
ACell->Row = FRowNum;
// Insert
Insert(Result, ACell);
return Result;
};
//__property virtual PSCell *get_Item(int index){ return (PSCell*)ArrayList::get_Item(index); }
//__property virtual void set_Item(int index, PSCell*){ArrayList::set_Item(index, ACell); }
__property virtual PSCell *get_Items(int index){ return (PSCell*)ArrayList::get_Item(index); }
__property virtual void set_Items(int index, PSCell*){ArrayList::set_Item(index, ACell); }
};
<PRE>
"Methode": Covariant-Rückgabetypen werden in verwalteten Typen nicht unterstützt
Hallo miteinander,
ich versuche eine Klasse SRow, die von ArrayList erbt zu implementieren.
Dabe möchte ich die property "Item" wie folgt neu definieren (siehe dazu auskommentierten source code). Der
Compiler meldet dann die o.g. Fehlermeldung und ich kann mit dieser nichts anfangen. Ich verstehe nicht was er
damit meint.
Da mir nichts besseres eingefallen ist, habe ich anstatt die property "Item" von ArrayList zu benutzen habe ich eine
neue property "Items" definiert, diese funktioniert (keine Compilermeldungen). Aber ich würde ganz gerne, die geerbte property
Item benutzen die auf meine struct PSCell zeigt.
Wäre toll, wenn jemand eine Idee hätte oder zumindestens mir etwas genaueres über den o.g. Fehler etwas sagen könnte (die Hilfe
hat mich nicht voll aufgeklärt).
Danke
MfG
Paulo Ferreira
<PRE>
// MatLib.h
#pragma once
#include <vcclr.h>
using namespace System;
namespace MatLib
{
// Sparse matrix cell
public __gc struct PSCell : public System::Object
{
public:
int Col, Row; // location of this cell in the matrix
double Value; // value to hold in the cell
};
public __gc class SRow : public System::Collections::ArrayList
{
private:
int FRowNum;
PSCell* ACell ;
public:
SRow(int ARowNum)
{
FRowNum = ARowNum;
};
~SRow()
{
Clear();
// ??? Wird der Speicher auch freigegeben ???
// Dispose -> Methode ?
};
virtual bool Find(int ACellCol, int & Index)
{
int L, H, C, I;
bool Result = false;
L = 0;
H = Count - 1;
while(L <= H)
{
I = (L + H) >> 1;
if (Items[I]->Col < ACellCol)
{
L = I + 1;
}
else
{
H = I - 1;
if (Items[I]->Col = ACellCol)
{
Result = true;
L = I;
}
}
}
Index = I;
return Result;
};
virtual int Add(const int ACellCol, const double AValue)
{
int Result;
Find(ACellCol, Result);
// Create New Cell
ACell = new PSCell();
ACell->Value = AValue;
ACell->Col = ACellCol;
ACell->Row = FRowNum;
// Insert
Insert(Result, ACell);
return Result;
};
//__property virtual PSCell *get_Item(int index){ return (PSCell*)ArrayList::get_Item(index); }
//__property virtual void set_Item(int index, PSCell*){ArrayList::set_Item(index, ACell); }
__property virtual PSCell *get_Items(int index){ return (PSCell*)ArrayList::get_Item(index); }
__property virtual void set_Items(int index, PSCell*){ArrayList::set_Item(index, ACell); }
};
<PRE>
Comment