Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Puma

unregistriert

1

31.03.2008, 17:24

C++: Problem bei der Übergabe von Strings

Hallo,

ich habe seit einiger Zeit ein Problem bei der Übergabe eines Strings an eine andere Funktion. Solange ich in einer Datei bleibe, beispielsweise der main.cpp ist das nicht kompliziert, wie muss ich das jetzt bei mehreren c++ dateien machen:

main.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <string>
#include "header.h"

// Hauptfunktion

int main()
{
   // Variablen

   string beispiel;

   // Übergeben

   test(&beispiel);

   // Rückgabewert

   return 0;
}



header.h

C-/C++-Quelltext

1
2
3
4
#include <string>

// Prototyp

int test(string *variable);


andere.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include <string>

// Funktion

int test(string *variable)
{
   // Rückgabewert

   return 0;
}


So funktioniert es irgendwie nicht, hat jemand eine Idee?

Danke im voraus!! :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

31.03.2008, 17:28

was genau funktioniert da nicht?
ich denk mal du hast vergessen, dass string im namespace std liegt...

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

3

31.03.2008, 17:39

du hast vergessen in andere.cpp den header header.h einzubinden.

noch etwas: sobald du header.h eingebunden hast, brauchst du in der .cpp datei nicht auch noch mal string einzubinden, da dies bereits in header.h geschieht.

da du bereits bei test einen pointer erstellst, musst du nicht auch noch ein "&" bei der übergabe hinschreiben.

wie dot bereits gesagt hat, musst du zusätzlich noch auf den namespace std verweisen.

würde in etwa so aussehen:

main.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "header.h"

// Hauptfunktion

int main()
{
   // Variablen

   string beispiel;

   // Übergeben

   test(beispiel);

   // Rückgabewert

   return 0;
}


header.h

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#pragma once

#include <string>

using namespace std;

// Prototyp

int test(string *variable);


andere.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include "header.h"

// Funktion

int test(string *variable)
{
   // Rückgabewert

   return 0;
}

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

31.03.2008, 17:43

Zitat von »"TheWinner"«

du hast vergessen in andere.cpp den header header.h einzubinden.


stimmt, das hab ich übersehen...


Zitat von »"TheWinner"«

da du bereits bei test einen pointer erstellst, musst du nicht auch noch ein "&" bei der übergabe hinschreiben.


das stimmt nicht. das & is notwendig, eben weil die funktion einen pointer erwartet. wenn möglich würd ich da allerdings überhaupt referenzen statt pointer verwenden. das macht die sache nur einfacher ;)


würd dann also so in der art aussehen:

main.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "header.h"

// Hauptfunktion

int main()
{
   // Variablen

   string beispiel;

   // Übergeben

   test(beispiel);

   // Rückgabewert

   return 0;
}



header.h

C-/C++-Quelltext

1
2
3
4
5
6
#include <string>

using namespace std;

// Prototyp

int test(string &variable);


andere.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include "header.h"

// Funktion

int test(string &variable)
{
   // Rückgabewert

   return 0;
}

Puma

unregistriert

5

31.03.2008, 19:59

RE: Stringübergabe

Erstmal große DANKE für die schnelle Antwort!!!!

Mein eigentliches Problem war aber der Namensbereich den ich vergessen hatte. :)

Die anderen Dinge sind natürlich auch falsch gewesen, aber das Programm hätte auch ohne diese funktioniert.
Trotzdem: Danke für die superschnelle Antwort!!!

mfg

6

01.04.2008, 15:23

Anmerkung: Es gehört allerdings zum schlechten Stil, ganze namespaces in Headern einzubinden, da es bei umfangreichen Projekten zu Problemen kommen kann.

Schreib im Header lieber std::string und lass das using namespace std weg.

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

7

01.04.2008, 15:40

Das ist doch jetzt echt auslegungs Sache .. Schlechter oder guter Stil ist immer subjektiv! ..

Edit: Ups hab die Sache mit den Headern überlesen ^.^ da ist es nätürlich net so doll^^

8

01.04.2008, 16:13

Zitat von »"Toa"«

Das ist doch jetzt echt auslegungs Sache .. Schlechter oder guter Stil ist immer subjektiv! ..

Als schlechten Stil bezeichnet man aber im Allgemeinen Dinge, die leichter zu Fehler führen können. In so fern ist das recht wenig subjektiv auch wenn viele Fehler die man durch "guten Stil" vermeidet eh nicht soo oft auftauchen.
Lieber dumm fragen, als dumm bleiben!

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

9

01.04.2008, 17:19

Zitat von »"TheWinner"«

du hast vergessen in andere.cpp den header header.h einzubinden.


Das musser net. Die funktion wird auch aufgerufen, wenn sie nicht weiss, wo der prototyp ist. Wichtig ist, das der aufrufer den Prototyp zu gesicht bekommt(oder gleich die funktion) und der namespace std überall dort geöffnet wird, wo er auch gebraucht wird(oder vor jedes string noch ein std:: schreiben).

@Topicersteller:
Normal würde man aber wohl keine zeiger verwenden, sondern referenzen.

C-/C++-Quelltext

1
2
3
4
int test(const std::string &variable)
{
    return 0;
}


Aber ich nehme an, soweit bist du noch nicht, also lass es besser, bevor du net weisst, was du da tust.

Socke

// Edit:

Noch was zum thema stil; Wenn man ne lib schreibt, sollte man nie nie mals namespaces in headern öffnen. bei normalen (kleinen) programmen ist das völlig egal. man sollte es nur nicht 10 mal machen(wegen der übersichtlichkeit) sondern an einem zentralen ort.

Socke

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

10

01.04.2008, 19:04

sry, hab nicht gross nachgedacht, als ich das using namespace std in den header geschrieben habe (hat einfach irgendwie gerade gepasst). natürlich habt ihr recht ;)

Werbeanzeige