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

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

31

25.07.2009, 11:35

Aber einen Funktionsaufruf innerhalb der Funktion möchte ich ja vermeiden.
Also, es sollte so funktionieren:
der Benutzer der Funktion muss nur z.B. das eingeben:

C-/C++-Quelltext

1
Funktion ("Hallo", (Escapes) (n, n));

und die Funktion Funktion wird aufgerufen. Da ich ja nicht weiß wie viele Escape-Zeichen er übergibt löse ich das mit einer Überladenen Funktion namens Escape. Es gibt also die Funktion mit 0, 1, 2, 3, 4 etc. Parametern. Da ich Zugriff auf die Parameterliste bräuchte um die gewünschte Überladene Funktion aufzurufen, muss das schon bei Aufruf der Funktion Funktion passieren. Da gibt es nur die Möglichkeit die Funktion in der Parameterliste aufzurufen oder Zugriff auf diese zu bekommen. Vlt. gibt es noch eine andere mir nicht bekannte :? .
Hoffe ich habe keinen verwirrt.

Danke im Voraus :)
Pi mal Daumen = 18.84955592

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

32

25.07.2009, 11:42

Dann einfach:

C-/C++-Quelltext

1
Funktion( "Hallo" Escapes( n, n ) );


Dafür brauchst du keinen Funktionszeiger sondern wertest einfach nur den Rückgabewert von Escapes aus.

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

33

25.07.2009, 12:02

So ungefähr?:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;

template <class P1>
void Station ( const P1& p1, void Berechnen (T Eins, T Zwei)
{
    cout << p1 << endl;
}

template <class T>
void Berechnen (T Eins, T Zwei)
{
    cout << Eins << Zwei << endl;
}

int main ()
{

    Station ("Hallo", Berechnen ('n', 'n');

    cin.get();
    return 0;
}


Fehler:

Quellcode

1
2
3
4
5
6
7
8
9
10
(6)error C2958: für das linke Trennzeichen Klammer "(" an der Stelle (5)' gibt es keine Entsprechung
error C2061: Syntaxfehler: Bezeichner 'T'
error C2143: Syntaxfehler: Es fehlt ',' vor '<end Parse>'
error C2143: Syntaxfehler: Es fehlt ')' vor '{'
error C2988: Unerkannte Vorlagendeklaration/-definition
error C2059: Syntaxfehler: '{'
error C2143: Syntaxfehler: Es fehlt ';' vor '{'
error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
error C2143: Syntaxfehler: Es fehlt ')' vor ';'
error C3861: "Berechnen": Bezeichner wurde nicht gefunden.


In printf funktioniert sowas ja auch :)

Danke im Voraus

Edit:
War das aus Versehen, gehört da nicht ein Komma hin:
Und die n's in sowas 'n':

C-/C++-Quelltext

1
Funktion ("Hallo", Escape ('n', 'n'));
[/cpp]
Pi mal Daumen = 18.84955592

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

34

25.07.2009, 12:14

Du hast in deiner ersten Funktion die Klasse T nicht als Template definiert und ne Klammer vergessen. Außerdem solltest du die Escapezeichen nicht direktausgeben, sondern durch die Berechnen-Funktionzurückgeben lassen und dann an die Funktion übergeben.

Aber ich frage mich ernshaft wozu du das benötigst.
Templates sind in diesem Fall meiner Meinung nach völlig überflüssig. Gut an erster Stelle darf von mir aus ein int stehen oder ähnliches. Da kann man es verwenden. Aber was soll eine Escapesequenz denn alles sein? An dieser Stelle darf der Nutzer meiner Meinung ger nichts anderes als einen String übergeben.
Meine Meinung:

C-/C++-Quelltext

1
2
3
4
std::vector<std::string> escapes;
escapes.push_back("\n");
escapes.push_back("\n");
Station("mein Text", escapes);


Das halte ich für das Sinnvollste. Wozu das letztlich benötigt wird ist mir allerdings schleierhaft.^^

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

35

25.07.2009, 12:51

David hat eher so etwas gemeint:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
template <class P1>
void Station ( const P1& p1, int  )
{
    cout << p1 << endl;
}

template <class T>
int Berechnen (T Eins, T Zwei)
{
    cout << Eins << Zwei << endl;
    return 0; 
}

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

36

25.07.2009, 13:08

:D Es hat funktioniert

Danke euch allen :D
Pi mal Daumen = 18.84955592

Werbeanzeige