Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Pointer

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.10.2005, 13:20 Uhr
~Realmaster
Gast


Hallo. Habe eine Frage zu Pointern.
Also ich habe eine Funktion aus der ich mehrere Werte haben will. Da ich nur einen zurückgeben kann, habe ich den anderen Adressen mit pointern zugewiesen. Das klappt für alle Variablen ganz gut. Nur jetzt habe ich einen String auf den ich verweisen will und dabei klappt es nicht. Warum???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.10.2005, 13:27 Uhr
virtual
Sexiest Bit alive
(Operator)


Was klappt denn nicht? - Wie sieht denn Dein versuch aus?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.10.2005, 13:33 Uhr
~Realmaster
Gast


Also ich verweise aus meiner Funktion


C++:
const void Rueckgabe_dateiname(string *);

//Hauptfunktion
//....
string output = "Hallo";

Rueckgabe_dateiname (&output);

//Hauptfunktion ENDE

TESTDLL_API const void Rueckgabe_dateiname(string *output)
{
}



Das TESTDLL_API ist für ne DLL. In der zugehörigen Header steht:


C++:
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif

extern "C" TESTDLL_API const void* Rueckgabe_dateiname(string *output);



Ich kriege als Fehler ausgegeben: das output und string nichtdeklarierte bezeichner sind
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.10.2005, 15:36 Uhr
predator



Hast du

C++:
#include <string>


?
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.10.2005, 21:19 Uhr
~Realmaster
Gast


Ja das hab ich.
Vieleicht kann mir ja mal jemand posten wie er das mit den Pointern macht. Vieleicht mach ich ja da irgendwas falsch. Mal son Musterbeispiel wie man auf eine Variable oder nen String in einer anderen Funktion verweist wäre nicht schlecht. Kann ja sein das das Problem nur ne Kleinigkeit ist.
Will nur von meinem Programm nicht den ganzen Quellcode hier rein posten, weil der so lang ist, das ihn sich keiner mehr anschauen würde.
Danke schon mal.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.10.2005, 21:51 Uhr
Pablo
Supertux
(Operator)


dein Problem hat aber gar nichts mit Pointern zu tun, sondern dass der Compiler nicht weiß, was output ist, weil er nicht weiß was string ist. Zeig lieber mehr vom Code (hast du mit std::string *outpu versucht?)
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.10.2005, 22:56 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das problem wird wohl sein das er den "string" nicht auf einen "elementaren" zeiger zurückführen kann (für extern "C") probiers mal so:


C++:
extern "C" TESTDLL_API const void* Rueckgabe_dateiname(void *lpOutput)
{
  std::string *output = (std::string*)lpOutput;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.10.2005, 21:11 Uhr
Lewi




Zitat von ~Realmaster:
Hallo. Habe eine Frage zu Pointern.
Also ich habe eine Funktion aus der ich mehrere Werte haben will. Da ich nur einen zurückgeben kann, habe ich den anderen Adressen mit pointern zugewiesen. Das klappt für alle Variablen ganz gut. Nur jetzt habe ich einen String auf den ich verweisen will und dabei klappt es nicht. Warum???



Hallo Realmaster

Vielleicht mal an der Stelle eine ganz andere Vorgehensweise, wie Du mehrere Werte aus einer Function rausholen kannst. Ich gebe das Musterbeispiel in klassichem C an, weil ich mit C++ nicht so gut umgehen kann.

1.) Definiere Dir eine Struktur, in der Du die Werte einer Funktion reinschreibst. Kannst es auch mit einzelnen Variablen machen, aber eine Struktur ist da oft sauberer, weil sie wie gesagt strukturiert.


C++:
typedef struct interface tag
{
int wert1;
int wert2;
.....
char string1[100],
} interface;

2.) Bau Deine Funktionen wie folgt auf

int f1(interface *if_pointer)
   {
   /* Code */

  strncpy(&if_pointer->string[0],&dein_string[0},100);
   };

int f2(interface *if_pointer)
   {
   /* Code */
   };

main()
   {
   interface my_interface;

   /* irgendein Code*/

   f1(&my_interface);
   f2(&my interface);

   / irgend ein anderer Code**/
   };


In der Funktion main() wird eine interface-struktur angelegt. Dorthin kopiert f1 seine Werte, unter anderem Deinen String, die sich f2 beim Aufruf abholt.

Dein Ansatz, in f2 auf einen string in f1 zu verweisen klappt aus folgendem Grund nicht:

1.) Wenn Du f1 aufrufst, werden die lokalen Variablen, die Du definierst auf dem Stack des Programs reserviert.
2.) Wenn Du f1 verlässt, wird der Platz auf dem Stack wieder freigegeben.
3.) Wenn Du f2 aufrufst, ist f1 schon lange abgearbeitet und der lokale Speicher wieder freigegeben, daher kann f2 eine lokale Variable von f1 gar nicht kennen, daher streikt dann Dein Compiler.

Gruß Lewi

mod edit: Benutze CPP Tags selber

Dieser Post wurde am 15.10.2005 um 00:30 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: