cannot convert parameter 1 from 'CStringArray' to 'CStringArray'

SittingDuck

Grünschnabel
Guten Tag!

was mache ich falsch, das ein CStringArray nicht zu einem CStringArray (?) konvertiert werden kann? (VC++ 7)


Code:
int cFileScanner::dummy(CStringArray para1, CStringArray para2, CString para3)
{
	return 0;
}

int cFileScanner::startScan(void)
{
	.
	.	
	.
	CStringArray a, b;
	CString c;
	int nRCode;
	nRCode = dummy(a,b,c);
	.
	.
	.
}
 
Es muss daran liegen, dass CStringArray keinen Copy Constructor besitzt. Der würde nämlich gebraucht, um deine CStringArrray-Objekte per Wert zu übergeben. Dabei wird eine lokale Kopie auf dem Stack erzeugt. Es wäre wahrscheinlich günstiger, deiner Funktion folgende Signatur zu verpassen, und die Objekte per Referenz zu übergeben:

Code:
int cFileScanner::dummy(CStringArray& para1, CStringArray& para2, CString para3)
{
  return 0;
}
Hier ist dann allerdings innerhalb der Funktion der direkte Zugriff auf die Originalobjekte möglich, und zwar auch schreibend. Willst du das verhindern, verwende konstante (const-) Referenzen:
Code:
int cFileScanner::dummy(const CStringArray& para1, const CStringArray& para2, CString para3)
{
  return 0;
}

Dasselbe solltest du eventuell für deinen dritten Parameter überlegen. Bei komplexeren Objekt ist die Übergabe per Referenz oft vorzuziehen, da man sich die Kosten für die Kopien spart.
 
Willst du das verhindern, verwende konstante (const-) Referenzen:
Code:
int cFileScanner::dummy(const CStringArray& para1, const CStringArray& para2, CString para3)
{
  return 0;
}
Geht leider nicht, da die MFC Funktion CStringArray::ElementAt() keine const Signatur hat (sagt man das so?).
Gibt: "error C2662: 'CStringArray::ElementAt' : cannot convert 'this' pointer from 'const CStringArray' to 'CStringArray &'"
Dasselbe solltest du eventuell für deinen dritten Parameter überlegen. Bei komplexeren Objekt ist die Übergabe per Referenz oft vorzuziehen, da man sich die Kosten für die Kopien spart.
Danke, hatte mir überhaupt keine Gedanken über byRef und byVal gemacht ...
 
Geht leider nicht, da die MFC Funktion CStringArray::ElementAt() keine const Signatur hat (sagt man das so?).
Gibt: "error C2662: 'CStringArray::ElementAt' : cannot convert 'this' pointer from 'const CStringArray' to 'CStringArray &'".
Tja, da besteht MFC-seitig noch Handlungsbedarf. :(
 
Zurück