[Anfänger] Wie gebe ich Variablen aus einer Klasse aus



  • Hallo,
    ich scheitere gerade an einer Grundsatzgechichte
    ich habe mir eine kleine Klasse geschieben die ein paar Stringwerte hält.
    nun möchte ich diese über cout in einer Klassen eigene Funktion ausgeben und bekomme es einfach nicht hin 😞

    hier erstmal die Klasse:

    /*
     * LogObject.cpp
     *
     *  Created on: 21.03.2017
     *      Author: husker
     */
    
    #include "LogObject.h"
    
    namespace std
    {
    	/**
    	 * Constructor
    	 */
    	LogObject::LogObject()
    	{
    
    	}
    
    	LogObject::~LogObject()
    	{
    
    	}
    
    	/*
    	 * Setter:
    	 * =======================================================================================================================
    	 */
    
    	void LogObject::setDate(std::string date)
    	{
    		this->ldate = date;
    	}
    
    	void LogObject::setTime(std::string time)
    	{
    		this->ltime = time;
    	}
    
    	void LogObject::setCip(std::string cip)
    	{
    		this->cip = cip;
    	}
    
    	void LogObject::setCSusername(std::string csusername)
    	{
    		this->csusername = csusername;
    	}
    
    	void LogObject::setSComputername(std::string scomputername)
    	{
    		this->scomputername = scomputername;
    	}
    
    	void LogObject::setSPort(std::string sport)
    	{
    		this->sport = sport;
    	}
    
    	void LogObject::setCSmethod(std::string csmethod)
    	{
    		this->csmethod = csmethod;
    	}
    
    	void LogObject::setCSuristem(std::string csuristem)
    	{
    		this->csuristem = csuristem;
    	}
    
    	void LogObject::setSCstatus(std::string scstatus)
    	{
    		this->scstatus = scstatus;
    	}
    
    	void LogObject::setSCwin32status(std::string scwin32status)
    	{
    		this->scwin32status = scwin32status;
    	}
    
    	void LogObject::setSCsubstatu(std::string scsubstatu)
    	{
    		this->scsubstatu = scsubstatu;
    	}
    
    	void LogObject::setXfullpath(std::string xfullpath)
    	{
    		this->xfullpath = xfullpath;
    	}
    
    	/*
    	 * Getter:
    	 * =======================================================================================================================
    	 */
    	std::string LogObject::getDate()
    	{
    		return ldate;
    	}
    
    	std::string LogObject::getTime()
    	{
    		return ltime;
    	}
    
    	/*
    	 * Functions:
    	 * =======================================================================================================================
    	 */
    
    	void writeOUT()
    	{
    		cout << "" << " " << "" << endl;
    	}
    }
    

    und noch die Header File:

    /*
     * LogObject.h
     *
     *  Created on: 21.03.2017
     *      Author: husker
     */
    
    #ifndef LOGOBJECT_H_
    #define LOGOBJECT_H_
    
    #include <string>
    #include <iostream>
    
    namespace std
    {
    
    	class LogObject
    	{
    		public:
    			LogObject();
    			virtual ~LogObject();
    
    			std::string getDate();
    			std::string getTime();
    
    			void setDate(std::string date);
    			void setTime(std::string time);
    			void setCip(std::string cip);
    			void setCSusername(std::string csusername);
    			void setSComputername(std::string scomputername);
    			void setSPort(std::string sport);
    			void setCSmethod(std::string csmethod);
    			void setCSuristem(std::string csuristem);
    			void setSCstatus(std::string scstatus);
    			void setSCwin32status(std::string scwin32status);
    			void setSCsubstatu(std::string scsubstatu);
    			void setXfullpath(std::string xfullpath);
    
    			void writeOUT();
    
    		private:
    			std::string ldate;
    			std::string ltime;
    			std::string cip;
    			std::string csusername;
    			std::string scomputername;
    			std::string sport;
    			std::string csmethod;
    			std::string csuristem;
    			std::string scstatus;
    			std::string scwin32status;
    			std::string scsubstatu;
    			std::string xfullpath;
    
    	};
    
    } /* namespace std */
    
    #endif /* LOGOBJECT_H_ *
    

    soweit so gut,
    ich möchte nun über die Funktion writeOUT() 2 meiner Stringwerte in die Console Schreiben, aber er will es einfach nicht

    wenn ich es so versuche:

    void writeOUT()
    	{
    		cout << ldate << " " << ltime << endl;
    	}
    

    bekomme ich folgende Meldung:
    Description Resource Path Location Type
    Symbol 'ldate' could not be resolved LogObject.cpp /w3ctosqlite/src line 112 Semantic Error

    ich habe es aber auch schon mit this->ldate versucht, oder auch mit den Gettern ...
    ich bekomme es einfach nicht zum laufen.

    ich denke mal das hat was mit static zu tun, verstehe aber einfach nicht warum..
    könnt ihr mir das vielleicht erklären?

    Danke schon einmal im vorraus

    LG
    Husker



  • Du musst dir erst eine Instanz dieser Klasse erstellen:

    void writeOUT()
    {
      LogObject myLog;
      myLog.setDate("21.03.2017");
      myLog.setTime("14:31");
      cout << myLog.getDate() << " " << myLog.getTime() << endl;
    }
    

    ach, ich sehe gerade, das gehört zu der Klasse... dann einfach so:

    void LogObject::writeOUT()
    {
      cout << ldate << " " << ltime << endl;
    }
    


  • Wie kommst du auf die Idee, deine Klasse im namespace std zu definieren?



  • Husker schrieb:

    Hallo,
    ich scheitere gerade an einer Grundsatzgechichte
    ich habe mir eine kleine Klasse geschieben die ein paar Stringwerte hält.
    nun möchte ich diese über cout in einer Klassen eigene Funktion ausgeben und bekomme es einfach nicht hin 😞

    hier erstmal die Klasse:

    /*
     * LogObject.cpp
     *
     *  Created on: 21.03.2017
     *      Author: husker
     */
    
    #include "LogObject.h"
    
    namespace std
    {
    	/**
    	 * Constructor
    	 */
    	LogObject::LogObject()
    	{
    
    	}
    
    	LogObject::~LogObject()
    	{
    
    	}
    
    	/*
    	 * Setter:
    	 * =======================================================================================================================
    	 */
    
    	void LogObject::setDate(std::string date)
    	{
    		this->ldate = date;
    	}
    
    	void LogObject::setTime(std::string time)
    	{
    		this->ltime = time;
    	}
    
    	void LogObject::setCip(std::string cip)
    	{
    		this->cip = cip;
    	}
    
    	void LogObject::setCSusername(std::string csusername)
    	{
    		this->csusername = csusername;
    	}
    
    	void LogObject::setSComputername(std::string scomputername)
    	{
    		this->scomputername = scomputername;
    	}
    
    	void LogObject::setSPort(std::string sport)
    	{
    		this->sport = sport;
    	}
    
    	void LogObject::setCSmethod(std::string csmethod)
    	{
    		this->csmethod = csmethod;
    	}
    
    	void LogObject::setCSuristem(std::string csuristem)
    	{
    		this->csuristem = csuristem;
    	}
    
    	void LogObject::setSCstatus(std::string scstatus)
    	{
    		this->scstatus = scstatus;
    	}
    
    	void LogObject::setSCwin32status(std::string scwin32status)
    	{
    		this->scwin32status = scwin32status;
    	}
    
    	void LogObject::setSCsubstatu(std::string scsubstatu)
    	{
    		this->scsubstatu = scsubstatu;
    	}
    
    	void LogObject::setXfullpath(std::string xfullpath)
    	{
    		this->xfullpath = xfullpath;
    	}
    
    	/*
    	 * Getter:
    	 * =======================================================================================================================
    	 */
    	std::string LogObject::getDate()
    	{
    		return ldate;
    	}
    
    	std::string LogObject::getTime()
    	{
    		return ltime;
    	}
    
    	/*
    	 * Functions:
    	 * =======================================================================================================================
    	 */
    
    	void writeOUT()
    	{
    		cout << "" << " " << "" << endl;
    	}
    }
    

    fehlt oben nicht ein "class LogObject"?



  • manni66 schrieb:

    Wie kommst du auf die Idee, deine Klasse im namespace std zu definieren?

    das war nicht meine,
    eclipse, wollte nicht ohne angabe eines Namespace die klasse erstellen,
    ist das falsch?


  • Mod

    Andromeda schrieb:

    fehlt oben nicht ein "class LogObject"?

    Nein, das wird wohl in LogObject.h stehen.



  • daddy_felix schrieb:

    Du musst dir erst eine Instanz dieser Klasse erstellen:

    void writeOUT()
    {
      LogObject myLog;
      myLog.setDate("21.03.2017");
      myLog.setTime("14:31");
      cout << myLog.getDate() << " " << myLog.getTime() << endl;
    }
    

    ach, ich sehe gerade, das gehört zu der Klasse... dann einfach so:

    void LogObject::writeOUT()
    {
      cout << ldate << " " << ltime << endl;
    }
    

    ja das scheint zu funktionieren 🙂
    Danke !


  • Mod

    Husker schrieb:

    ja das scheint zu funktionieren 🙂
    Danke !

    Ich bitte dich auch sehr, manni66s Kommentar zur Kenntnis zu nehmen. Definier nichts in std!



  • SeppJ schrieb:

    Husker schrieb:

    ja das scheint zu funktionieren 🙂
    Danke !

    Ich bitte dich auch sehr, manni66s Kommentar zur Kenntnis zu nehmen. Definier nichts in std!

    Als ob den TE das in irgendeiner Weise interessiert. Der hat null Ahnung und auch null Interesse. Wie man sowas macht ergoogelt man sich in 5 Sekunden.



  • Husker schrieb:

    manni66 schrieb:

    Wie kommst du auf die Idee, deine Klasse im namespace std zu definieren?

    das war nicht meine,
    eclipse, wollte nicht ohne angabe eines Namespace die klasse erstellen,
    ist das falsch?

    Ja! Du darfst natürlich einen eigenen Namen erfinden, wenn Eclipse das unbedingt will. C++ selber kommt auch ohne den Namespace aus.



  • SeppJ schrieb:

    Husker schrieb:

    ja das scheint zu funktionieren 🙂
    Danke !

    Ich bitte dich auch sehr, manni66s Kommentar zur Kenntnis zu nehmen. Definier nichts in std!

    okay werde versuchen das wieder auszubauen,
    habe in Eclipse in zwischen auch den Schalter gefunden,
    aber kannst du kurz erläutern warum das schlecht ist?



  • kein_interesse schrieb:

    SeppJ schrieb:

    Husker schrieb:

    ja das scheint zu funktionieren 🙂
    Danke !

    Ich bitte dich auch sehr, manni66s Kommentar zur Kenntnis zu nehmen. Definier nichts in std!

    Als ob den TE das in irgendeiner Weise interessiert. Der hat null Ahnung und auch null Interesse. Wie man sowas macht ergoogelt man sich in 5 Sekunden.

    das interessiert mich schon,
    die sache mit den Namespaces ist mir zugegebener weise noch nicht ganz klar



  • Schau einfach mal hier rein: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4582.pdf, Abschnitt 17.6.4.2.1

    Du hast UB, wenn du eigene Typen in std definierst.


Anmelden zum Antworten