Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Problem mit Funktion (https://www.delphipraxis.net/96323-%5Bc-%5D-problem-mit-funktion.html)

Mark90 22. Jul 2007 18:45


[C++] Problem mit Funktion
 
HI leute!

ich bin vor kurzem auf c++ umgestiegen. Ich habe ein kleines Problem mit einer funktion!

Code:
TStringList InputFile(AnsiString File)
{
   TStringList *sl = new TStringList();

   sl->LoadFromFile(File);
   // hier ändere ich die Stringlist

   return sl;
}
Es kommt eine Fehlermeldung dass tStringlist * nicht in TStringlist konvertiert werden kann.

Danke Schon mal im vorraus für eure antworten

[edit=SirThornberry]Delphi-Tags durch c-Tags ersetzt - Mfg, SirThornberry[/edit]

r2c2 22. Jul 2007 18:50

Re: [C++] Problem mit Funktion
 
Zitat:

Zitat von Mark90
ich bin vor kurzem auf c++ umgestiegen.

Gibts Leute, die sich das freiwillig antun? :shock:

Versuchs mal so(die Fehlermeldung ist doch eigentlich eindeutig):
Delphi-Quellcode:
TStringList* InputFile(AnsiString File)

mfg

Christian

Apollonius 22. Jul 2007 18:54

Re: [C++] Problem mit Funktion
 
Jetzt muss der Zeiger aber außerhalb der Funktion freigegeben werden. Ich denke, die günstigste Variante wäre
Code:
return *sl;

Mark90 22. Jul 2007 18:57

Re: [C++] Problem mit Funktion
 
Zitat:

Zitat von r2c2
Zitat:

Zitat von Mark90
ich bin vor kurzem auf c++ umgestiegen.

Gibts Leute, die sich das freiwillig antun? :shock:

Versuchs mal so(die Fehlermeldung ist doch eigentlich eindeutig):
Delphi-Quellcode:
TStringList* InputFile(AnsiString File)

He danke das hat geklappt!! man sollte die fehlermeldung einfach genauer lesen! Un was Delphi betrifft hast du recht!! wesentlich einfacher als c++

r2c2 22. Jul 2007 19:00

Re: [C++] Problem mit Funktion
 
Zitat:

Zitat von Apollonius
Jetzt muss der Zeiger aber außerhalb der Funktion freigegeben werden. Ich denke, die günstigste Variante wäre
Code:
return *sl;

Dereferenzieren von VCL-Klassen geht nicht. Aber dein Einwand ist berechtigt. Besser also so:
Code:
// Pseudocode:
void InputFile(AnsiString File, TStringList* sl)

   sl->LoadFromFile(File);
   // hier ändere ich die Stringlist
}


[...]

  sl = new TStringList();
  try
  {
    InputFile(File, sl);
  }
  finally
  {
    sl.Free;
  }
mfg

Christian

Apollonius 22. Jul 2007 19:20

Re: [C++] Problem mit Funktion
 
Wieder was gelernt. Man kann aber durchaus von Delphi übertragen: Da soll man keine Klassen als result zurückegeben, und Delphi-Klassen entsprechen ja ungefähr Zeigern auf C++-Klassen.

r2c2 22. Jul 2007 21:19

Re: [C++] Problem mit Funktion
 
Zitat:

Zitat von Apollonius
Wieder was gelernt. Man kann aber durchaus von Delphi übertragen: Da soll man keine Klassen als result zurückegeben, und Delphi-Klassen entsprechen ja ungefähr Zeigern auf C++-Klassen.

Zur Erklärung:
Im C++Builder gibt es 2 Arten von Klassen: C++-Klassen und VCL-Klassen. C++-Klassen können Mehrfachvererbung, dereferenziert werden, aufm Stack liegen, statisch lokal sein, etc. also all die kranken Featues, die C++ eben hat. Im Gegensatz dazu sind VCL-Klassen immer von TObject abgeleitet und verhalten sich auch sonst genau so, wie die Klassen aus Delphi. Vermischen geht aber nicht. d.h. die einen können zwar die anderen benutzen, etc. aber nicht von ihnen erben...

mfg

Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz