WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Zugriff auf Stack klassenüberschreitend in C++ (http://www.wcm.at/forum/showthread.php?t=190288)

Harika 24.04.2006 11:36

Zugriff auf Stack klassenüberschreitend in C++
 
Hallo,
ich schreibe gerade an einem Stack auf dem ich doubleWerte rauflege und mit diesen hantiere. Nur stehe ich vor dem Problem das ich es nicht schaffe den Stack in anderen Klassen zu manipulieren es geschieht alles aus der main.cpp heraus, was nicht so toll ist.

TRStack.cpp
Zitat:

#include<iostream>
#include<stack>
#include "TRstack.h"
using namespace std;

stack<double> Example;

TRstack::TRstack(int N) // Stack initialisieren
{

//stack<double> N; Funktioniert nicht

cout << "Stack initialisiert" << endl;
}
TRStack.h
Zitat:

class TRstack
{

public:
TRstack(int);
bool TRempty(); // ist der Stack leer?
};
Main.cpp
Zitat:

#include "stdafx.h"
#include <iostream>
#include <stack>
#include "TRoperator.h"
#include "TRstack.h"

int _tmain(int argc, _TCHAR* argv[])
{
TRstack Example(0); //initialisieren
Example.TRempty(); //das funktioniert

}
(aufs Wesentliche beschränkt)

Ich würde nun gerne eine Klasse Operator schreiben in der ich auf den Stack mit Example.pop/push/top(); zugreifen kann. Sodass ich eine Addition in der Klasse Operator mit x1=Example.top(); ... x3=x1+x2 aufrufen kann. Bis dato mache ich das in der Main.cpp mit einem meines Erachtens zu verschachtelten Aufruf der so aussieht TRoperator::OPaddition(Example.TRtop(),Example.TRt op()) (Mir ist bewusst das er hier nur denselben Werte zweimal nimmt.) Wie kann ich das nun so ändern das ich eben einen Stack habe den ich vom ganzen Programm aus manipulieren kann?
Edit: Benutze Visual C++

Biri 24.04.2006 15:42

Zitat:

Wie kann ich das nun so ändern das ich eben einen Stack habe den ich vom ganzen Programm aus manipulieren kann?
Stack außerhalb von Main vereinbaren (globale varialble) oder jeder Funktionen die zugreifen soll, eine Ref. darauf übergeben.

Harika 24.04.2006 18:34

Ich hab probiert: stack<double> Example; vor Main zu schreiben hat keinen Effekt. Und ich weiss ehrlich gesagt nicht wie und wo ich die Referenz setzen muss.

Biri 25.04.2006 10:20

hi,

c++ is bei mir schon länger her, geht aber noch so halbwegs. ;)
btw. der code hat zwar wenig sinn, aber das prinzip sollte dadurch klar sein:

Main.cpp:

PHP-Code:

#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
#include <stack>
#include "TRStack.h"


int _tmain(int argc_TCHARargv[])
{
    
TRStackpExample = new TRStack(5); 
    
TRStackpExample2 = new TRStack(7);

    
bool empty = pExample->TRempty();

    
TRStack pResult = *pExample + *pExample2;
    
cout << pResult.testval;

    return 
0;


TRStack.h:

PHP-Code:

#pragma once
#include<iostream>
#include<stack>

using namespace std;

class 
TRStack
{
public:
    
// Varialbes
    
stack<doubleExample;
    
int testval;

    
// functions
    
TRStack(int n);    
    
bool TRempty(void);
    
TRStackoperator+(const TRStackr);
public:
    ~
TRStack(void);
}; 

TRStack.cpp:

PHP-Code:

#include "StdAfx.h"
#include "TRStack.h"
#include<iostream>
#include<stack>

using namespace std;

TRStack::TRStack(int n)
{
    
cout << "Stack initialisiert" << endl;
    
testval n;
}

TRStackTRStack::operator+ (const TRStackr

    
// do overloading as you like 
    // example
    
this->testval += r.testval;
    
    return *
this


bool TRStack::TRempty(void)
{
    return 
false;
}

TRStack::~TRStack(void)
{


blöde formatierung - es heißt natürlich, ohne Leerzeichen:

TRStack & TRStack :: operator + (const TRStack& r)

fg
hannes


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag