Frage zum Code
-
Doch!
namespace wurde eingesetzt hat aber nciht geklappt
-
na gut ich habs aus spaß noch einmal versucht nun läuft es

falls es euch interessiert so sieht es nun aus
#include <iostream> #include <cstdio> #include <unistd.h> #include <sys/types.h> #include <sys/reboot.h> #include <sys/sysinfo.h> #include <sys/utsname.h> #include "../sysinfo.h" int main(){ exsystem::SYSInfo *a = new exsystem::SYSInfo(); std::cout << "Ram: " << a->getTotalram() << std::endl; delete a; return 0; }#include <cstdio> #include <unistd.h> #include <sys/types.h> #include <sys/reboot.h> #include <sys/sysinfo.h> #include <sys/utsname.h> #include "sysinfo.h" //#ifdef POSIX namespace exsystem { int SYSInfo::getTotalram(){ return Totalram; } const char* SYSInfo::getSysname(){ return SysnameInfo.c_str(); } const char* SYSInfo::getRelease(){ return ReleaseInfo.c_str(); } const char* SYSInfo::getNodename(){ return NodenameInfo.c_str(); } const char* SYSInfo::getMaschine(){ return MachineInfo.c_str(); } SYSInfo::SYSInfo(){ struct sysinfo *mysys = new struct sysinfo; struct utsname myInfo; if(sysinfo(mysys)!=-1){ Totalram=mysys->totalram/1024; } if (uname(&myInfo) != -1) { SysnameInfo=myInfo.sysname; ReleaseInfo=myInfo.release; NodenameInfo=myInfo.nodename; MachineInfo=myInfo.machine; } } SYSInfo::~SYSInfo(){ } } //#endif#include <iostream> #ifndef SYSINFO_H #define SYSINFO_H namespace exsystem { class SYSInfo { public: void systemreboot(); SYSInfo(); ~SYSInfo(); int getTotalram(); const char* getSysname(); const char* getRelease(); const char* getNodename(); const char* getMaschine(); private: int Totalram; std::string SysnameInfo; std::string ReleaseInfo; std::string NodenameInfo; std::string MachineInfo; }; } #endifausgabe:
Ram: 3973944
-
schön, dass es läuft. Und weiterhin viel Spaß mit deinem Speicherloch...
edit: in der main.cpp sind auch noch ein paar Header zuviel eingebunden. Zu den cahr*-Pointern hatte ich mich ja schon geäußert.
-
ehm ... ja so gut kenne ich mich nicht aus aber ich arbeite dran!
darfst mir auch gerne einen Tip dazu geben!lg Enno
-
konkrete Tipps dazu:
* Rückgabewert der Getter-Methoden:
const std::string&anstelle vonconst char*
* nach Möglichkeit keinnew. Und wenn, dann nur in Verwendung mit einem Smartpointer. Bei dir sehe ich jetzt keinen Grund, Pointer zu verwenden.
* in der main.cpp benätigst du nur#include "../sysinfo.h".
-
habe alles so weit geänder nun steht in der konsole das hier:
Warnung: Referenz auf temporären Wert wird zurückgegeben [standardmäßig aktiviert]ich mein es läuft aber kannst du mir sagen was das bedeutet?
-
das kann ich dir nur sagen, wenn du mir die entsprechende Codezeile zeigst.
edit: meine Glaskugel vermutet, dass du in den Gettern immernoch
return xyz.c_str()stehen hast. Das [c].c_str()[/] muss natürlich auch weg. An der Stelle wird der char-Pointer implizit in einen std::string umgewandelt. Eine Referenz auf diesen String wird zurückgegeben. Der String geht aber sofort danach out of scope, so dass die Referenz nicht mehr verwendbar ist.
-
Lass das .c_str() weg. Was das bedeutet: Na, steht doch da, du gibst eine Referenz auf einen temporären Wert zurück, da der string den du in deiner return-Anweisung konstruierst nach verlassen der Funktion nicht mehr exisitert. Und das ist gar nicht gut. Dass es trotzdem funktioniert ist pures Pech, denn dadurch fällt der Fehler nicht sofort auf.
-
ist irgentwie nur einmal gekommen ... komisch
naja allerdings klappt da etwas nicht und es kommt das hier raus wenn ich das mit std::string& mache in der konsole:
System name: 8��ؓ
�����ؓ `�ؓ�ؓ �ؓ�ؓSpeicherzugriffsfehler (Speicherabzug geschrieben)#include <iostream> #ifndef SYSINFO_H #define SYSINFO_H namespace exsystem { class SYSInfo { public: void systemreboot(); SYSInfo(); ~SYSInfo(); int getTotalram(); const std::string& getSysname(); const std::string& getRelease(); const std::string& getNodename(); const std::string& getMaschine(); private: int Totalram; std::string SysnameInfo; std::string ReleaseInfo; std::string NodenameInfo; std::string MachineInfo; }; } #endif#include <cstdio> #include <unistd.h> #include <sys/types.h> #include <sys/reboot.h> #include <sys/sysinfo.h> #include <sys/utsname.h> #include "sysinfo.h" //#ifdef POSIX namespace exsystem { int SYSInfo::getTotalram(){ return Totalram; } const std::string& SYSInfo::getSysname(){ return SysnameInfo.c_str(); } const std::string& SYSInfo::getRelease(){ return ReleaseInfo.c_str(); } const std::string& SYSInfo::getNodename(){ return NodenameInfo.c_str(); } const std::string& SYSInfo::getMaschine(){ return MachineInfo.c_str(); } SYSInfo::SYSInfo(){ struct sysinfo *mysys = new struct sysinfo; struct utsname myInfo; if(sysinfo(mysys)!=-1){ Totalram=mysys->totalram/1024; } if (uname(&myInfo) != -1) { SysnameInfo=myInfo.sysname; ReleaseInfo=myInfo.release; NodenameInfo=myInfo.nodename; MachineInfo=myInfo.machine; } } SYSInfo::~SYSInfo(){ } } //#endif#include "../sysinfo.h" int main(){ exsystem::SYSInfo a; std::cout << "Ram: " << a.getTotalram() << std::endl; std::cout << "System name: " << a.getSysname() << std::endl; std::cout << "Release: " << a.getRelease() << std::endl; std::cout << "Nodename: " << a.getNodename() << std::endl; std::cout << "Maschine: " << a.getMaschine() << std::endl; return 0; }
-
daddy_felix schrieb:
Liest du unsere Antworten überhaupt?
Offensichtlich nicht.
Tja, da habe ich besseres zu tun, als hier weiter zu helfen…
-
Hallo schau mal hier:
#include <iostream> using namespace std; void foo ( string & str ) { cout<<str; } int main () { //foo ( "hallo" ); // Erzeugt ---> [C++ Warnung] Unit1.cpp(12): W8030 Temporäre Größe für Parameter 'str' in Aufruf von 'foo(string &)' verwendet string blup = "hallo"; foo ( blup ); // Alles wieder gut^^ return 0; }
-
hab den edit und seppj's post nicht gesehen tut mir leid war zu schnell!
na so klappts dann ... und ihr seit aber auch immer ein wenig negativ

EDIT: Oh! man ihr seit echt die besten
da hat der Azubi echt doof geguckt nach dem ich ihm die Verbesserung durch euch gezeigt hab!!! <3<3<3<3
-
Kannst deinem Kollegen ja mal von dem Forum hier erzählen vielleicht kennt er es noch nicht. (Bestes C++ Forum überhaupt meiner Meinung nach.)
-
Werd ich und ja du hast recht! alleine schon wie geduldig und schnell hier geholfen wird
(Y)