[C++] Probleme mit C++ und QT

Allo

Lt. Commander
Dabei seit
Feb. 2004
Beiträge
1.064
Guten Tag.
Ich wollte mich ein wenig in C++ einarbeiten. Dabei greife ich unter anderem auf den QT-Designer zurück (folglich benutze ich auch QT).

Da ich aber beim programmieren ein „segmentation fault“ ausgelöst habe, wollte ich mit
wissen wo mein Programm abbricht. In der main.cpp Datei habe ich auch die beiden Librarys eingefügt:
#include <iostream.h>
#include<iostream>
eine der beiden wird's ja wohl sein.

Doch leider kommt jetzt beim kompillieren folgender Fehler:

.ui/../form1.ui.h: In member function `virtual void form1::alloshutdown()':
.ui/../form1.ui.h:21: error: `cout' undeclared (first use this function)

Offensichtlich findet das Programm die Library nicht (das selbe war auch bei #include<string>)
wenn ich „cout“ in einem normalen C++ Programm schreibe und das mit dem c++-Compiller compilliere geht aber alles.

Ich weiß wirklich nicht mehr was ich machen soll damit das Programm endlich läuft :(
 

Bacchisio

Lieutenant
Dabei seit
Sep. 2004
Beiträge
517
Re: Probleme mit C++ und QT

Hi,

versuche mal folgendes:

-"using namespace std;" unter den includes

- oder "std::cout"
 
Zuletzt bearbeitet:

Allo

Lt. Commander
Ersteller dieses Themas
Dabei seit
Feb. 2004
Beiträge
1.064
Re: Probleme mit C++ und QT

hilft leider nichts
 

Bacchisio

Lieutenant
Dabei seit
Sep. 2004
Beiträge
517
Re: Probleme mit C++ und QT

du könntest das Programm posten oder mir als mail schicken, vielleicht finde ich so was
 

Allo

Lt. Commander
Ersteller dieses Themas
Dabei seit
Feb. 2004
Beiträge
1.064
Re: Probleme mit C++ und QT

hier ist die main.cpp und die form1.ui.h
Zitat von main.cpp:
#include <qapplication.h>
#include "form1.h"
// #include<string> //für string
#include <iostream.h>
#include<iostream>
#include <stdlib.h>
#include <qstring.h>

int main( int argc, char ** argv )
{
QApplication a( argc, argv );
form1 w;
w.show();
a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
return a.exec();
}

Zitat von form1.ui.h:
void form1::allologout()
{

}

// #### #### Logout #### ####
// #### #### ###### #### ####
void form1::alloshutdown() {
cout<<"Hallo";
// define vars
char* reboot;
QString rebootnew="sudo /sbin/reboot";

// set reboot=rebootnow (no idea why to to so..)
strcpy(reboot,rebootnew); //c_str()

// finaly reboot the system
system(reboot);
} // void form1::alloshutdown()

void form1::allorestart()
{

}


das Programm wird mit den Befehlen
qmake -o Makefile abmelden.pro; make
erstellt
 

Bacchisio

Lieutenant
Dabei seit
Sep. 2004
Beiträge
517
Re: Probleme mit C++ und QT

habe zur Zeit das qt Zeug nicht drauf (vor kurzem formatiert), kann es daher nicht kompilieren

ich habe mir aber ein "altes" qt Programm von mir angeschaut, und da klappt es so wie ich es gesagt habe. Das "#include <iostream.h>" brauchst du nicht, ohne ".h" reicht es.
Was bekommst du für eine Meldung? qmake neu ausgeführt?
 

Siberian..Husky

Lt. Commander
Dabei seit
Apr. 2004
Beiträge
1.125
Re: Probleme mit C++ und QT

also erstmal sieht das sehr komisch aus. kann es sein das die form.ui.h eine automatisch erstellte datei von Qt ist? wenn ja dann soltest du dort garnichts ändern.

ansonsten: der include ist in er falschen datei! du musst den header immer in die datei includieren in der du ihn brauchst! bei c(++) werden alle cpp dateien einzeln kompiliert - wenn du also die header(und nur die header!) nicht includierst kennt der compiler die bezeichner aus den anderen dateien garnicht und kann diese daher auch nicht nutzen! deswegen auch die header dateien - da steht alles drin was der compiler einer anderen datei wissen muss - also wie heist die function, welche argumente müssen übergeben werden. was die function aber genau macht ist einer anderen datei vollkommen egal - erst der linker fügt dann alle compilierten cpp dateien wieder zusammen.

das #include<iostream> muss also in die form1.ui.h (die datei klingt für mich wirklich wie eine automatisch erzeuge datei bei qt4 :p). danach solltest du cout mit std:cout nutzen da cout im namespace std liegt. using namespace std; nach dem includieren würde auch funktionieren - ist aber schlechter stil.
 

Bacchisio

Lieutenant
Dabei seit
Sep. 2004
Beiträge
517
Re: Probleme mit C++ und QT

Hi,

die Datei wurde vom Qt designer erzeugt.

Ich bin davon ausgegangen dass er die includes in der richtigen Datei eingetragen hat.
Am besten macht er das mit dem "object explorer" (Members tab), dann klappt es mit der Ausgabe
 

Anhänge

  • test.jpg
    test.jpg
    52,1 KB · Aufrufe: 235
Zuletzt bearbeitet:

Allo

Lt. Commander
Ersteller dieses Themas
Dabei seit
Feb. 2004
Beiträge
1.064
Re: Probleme mit C++ und QT

genau da hats gehangen :D

vielen dank euch beiden.


Jetzt ist es zeit für ein anderes Problem:
ich möchte den aktuell angemeldeten Benutzer herausfinden (also z.b. "root", "allo", "nobody".., halt der der gerada am system angemeldet ist).

in der Console geht das ja sehr leicht mit "echo $USER" , aber in c++ :confused_alt: . ich hab mich schon zu tode gegoogeld, ich finde einfach nicht die lösung.
 

Siberian..Husky

Lt. Commander
Dabei seit
Apr. 2004
Beiträge
1.125
Re: Probleme mit C++ und QT

ahh! jetz weiß ich woher ich diese dateinahmen kenne.

du arbeitest vermutlich nach einem tutorial oder? diese arbeitsweise ist aufjedenfall nicht zu empfehlen. in qt4 wird diese auch nichtmehr unterstützt. stattdessen solltest du eine eigene klasse von dem form ableiten wenn du weitere funktionalität per code hinzufügen willst.

am besten wäre du downloadest dir mal das buch "C++ GUI Programming with Qt 3". das giebts hier unter download: http://phptr.com/bookstore/product.asp?isbn=0131240722&rl=1

dort steht eigentlich alles drin was man zu qt3 wissen muss - auch das man im qt designer keinen c++ code schreiben sollte :p
 
Zuletzt bearbeitet:

Siberian..Husky

Lt. Commander
Dabei seit
Apr. 2004
Beiträge
1.125
Re: Probleme mit C++ und QT

Zitat von Allo:
genau da hats gehangen :D

vielen dank euch beiden.


Jetzt ist es zeit für ein anderes Problem:
ich möchte den aktuell angemeldeten Benutzer herausfinden (also z.b. "root", "allo", "nobody".., halt der der gerada am system angemeldet ist).

in der Console geht das ja sehr leicht mit "echo $USER" , aber in c++ :confused_alt: . ich hab mich schon zu tode gegoogeld, ich finde einfach nicht die lösung.


erstmal sorry für doppelpost - aber wir haben gerade gleichzeitig gepostet und mit nem edit geht das sonst sicher wieder unter :p.

auf der console benutze ich für sowas das programm whoami. das gibt aus wer du bist ;). sollte sich relativ einfach mit QProcess nutzen lassen.

P.S.: zu QProcess gibts in dem oben genannten buch auch ein beispiel :D
 

Bacchisio

Lieutenant
Dabei seit
Sep. 2004
Beiträge
517
Re: Probleme mit C++ und QT

so müsste es auch gehen:

Code:
char a=system("whoami");

@Siberian..Husky

Danke für den Link!
 

Boron

Commander
Dabei seit
Sep. 2001
Beiträge
2.785
Re: Probleme mit C++ und QT

@Bacchisio
Das was du da schreibst geht nicht. Schau mal nach, was system() zurückliefert. Nämlich kein char.

@Allo
Aktueller User herausfinden.

#include<stdlib.h>
char*getenv(constchar*name);


Bsp.:

char* userName = getenv( "USER" );
 

Bacchisio

Lieutenant
Dabei seit
Sep. 2004
Beiträge
517
Re: Probleme mit C++ und QT

Hi,

höchstwahrscheinlich hast du Recht dass es keine optimale Lösung ist.

Ich versuche aber (fast) nur dann zu posten wenn ich mir sicher bin, oder den code getestet habe.
Die char Variable kam mir auch seltsam vor, aber damit kann man den Benutzer gut abfragen
Code:
#include<iostream>

int main() {
char a=system("whoami");
std::cout<<a;
}
 
Zuletzt bearbeitet:

Boron

Commander
Dabei seit
Sep. 2001
Beiträge
2.785
Dann wird aber der Benutzername nur auf der Konsole ausgegeben, weil der Befehl whoami das macht, und nicht, weil die cout Zeile das macht.

Da ich denke, dass Allo den Usernamen irgendwie weiterverwenden will nutzt ihm das leider nicht viel.
 

Bacchisio

Lieutenant
Dabei seit
Sep. 2004
Beiträge
517
Hast Recht, wollte mich gerade selbst korregieren.
Danke und sorry, werde beim nächsten mal besser aufpassen
 
Zuletzt bearbeitet:

Boron

Commander
Dabei seit
Sep. 2001
Beiträge
2.785
Hey, welchen Fehler hast du gemacht für den du dich entschuldigen musst :confused_alt:?
Was glaubst du welche verdrehten Fehler ich täglich mache, weil meine kaputten Hirnwindungen was völlig falsches glauben :D.
 

Allo

Lt. Commander
Ersteller dieses Themas
Dabei seit
Feb. 2004
Beiträge
1.064
das problem mit dem benutzernamen habe ich jetzt gelöst. das geht mit
#include <stdlib.h>
// ....
char *user = getenv("USER");

Und wegen dem Buch als Downloadversion:
Gibts das auch auf deutsch? C++ zu lernen ist schon verdammt schwer, da will ich nicht noch unbedingt von deutsch auf englisch umdenken müssen :freak:

@Bacchisio
manchmal sind es gerade die Fehler die einem weiter bringen ;)
 

Siberian..Husky

Lt. Commander
Dabei seit
Apr. 2004
Beiträge
1.125
Zitat von Allo:
das problem mit dem benutzernamen habe ich jetzt gelöst. das geht mit


Und wegen dem Buch als Downloadversion:
Gibts das auch auf deutsch? C++ zu lernen ist schon verdammt schwer, da will ich nicht noch unbedingt von deutsch auf englisch umdenken müssen :freak:

@Bacchisio
manchmal sind es gerade die Fehler die einem weiter bringen ;)

das buch gibt es auf deutsch. allerdings ist es weniger zum c++ lernen geeignet. eigentlich sollte man schon c++ können bevor man sich mit qt beschäftigt(worum sich dieses buch dreht). ein gutes c++ anfängerbuch kann ich dir leider nicht empfehlen, aber vielleicht findet sich da ja noch jemand anderes =).

falls du trotzdem an der deutsche übersetzung interesse hast: http://www.edv-buchversand.de/edv-buch/catalog.nsf/vaw3productsbykey/AW-2186

P.S.: bei amazon gibts zu dem buch eine sehr schlechte bewertung. allerdings glaube ich kaum das dieser mensch das buch überhaubt gelesen hat. den worum es darin geht(nähmlich um gui programmierung mit der qt bibliothek ;)) hat er offensichtlich nicht begriffen.
 
Top