error: http; was not declared in this scope

Alles rund um die Programmierung mit Qt
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

error: http; was not declared in this scope

Beitrag von joebar »

Hi,

habe folgendes

Code: Alles auswählen

#include "testapp.h"
#include <QtGui>
#include <QtCore>
#include <QHttp>

TestApp::TestApp(QDialog *parent) : QDialog(parent)
{
setupUi(this);
connect(okButton, SIGNAL (clicked()), this, SLOT(slotClose()));
http = new QHttp(this);
}

TestApp::~TestApp()
{}
void TestApp::slotClose()
{
accept();
}
Das mit http = new... habe ich dem Qt Tutorial entnommen http://doc.trolltech.com/4.1/network-ht ... w-cpp.html
Im pro File habe ich natuerlich QT +=network angegeben fuers include

:roll:

Danke,
J.
Zuletzt geändert von joebar am 26. November 2006 03:28, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wo ist deine Frage?
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Die Frage ist was muss ich machen um den Fehler zu beseitigen? Warum kennt er http nicht in dem Scope? Ich will das Object http hier doch anlegen, und qhttp sollte bekannt sein (aber darueber beschwert er sich ja auch nicht)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

qmake vergessen aufzurufen nachdem Du QT += network eingefügt hast.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Nein, qmake habe ich ausgefuehrt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dann probiere es doch z.B. einfach mal mit qt-4-src\examples\tutorial\t1 aus. Habe dort gerade QT += network in die pro-Datei und #include <QHttp> im source eingefügt und es klappt ohne Probleme.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Gleiche Problem, vom t1 Tutorial habe ich nun folgendes

main.cpp

Code: Alles auswählen

    #include <QApplication>
    #include <QPushButton>
#include <QHttp>

    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
http = new QHttp(this);

        QPushButton hello("Hello world!");
        hello.resize(100, 30);

        hello.show();
        return app.exec();
    } 

pro File

Code: Alles auswählen

######################################################################
# Automatically generated by qmake (2.00a) Mon Nov 27 05:02:39 2006
######################################################################

TEMPLATE = app
TARGET += 
DEPENDPATH += .
INCLUDEPATH += .
QT += network

# Input
SOURCES += main.cpp

Eine Idee?

Danke,
J.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

So, jetzt setzen wir uns hin, lernen noch einmal ein bißchen C++-Grundlagen, schauen uns in aller Ruhe nocheinmal die Fehlermeldungen an und bessern dann selbstständig den Fehler aus...
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Ok, habe den bloeden Fehler gefunden. Trotzdem sei angemerkt, dass es nicht immer - auch hier - nicht gerechtfertig ist erstmal anzunehmen man haette nichts gelesen, gegoogelt oder was auch immer. Sei der Fehler auch noch so bloed.

Code: Alles auswählen

QHttp* http = new QHttp();
funktioniert. Habe aber noch eine Frage - ich weiss muesste ich eigentlich auch wissen, tue ich aber nicht, warum muss ich das this in diesem Falle weg lassen? Ich stehe mit dem this etwas auf Kriegsfuss, in meinem C++ Buch sind die Beispiele dazu etwas trivial. Kann mir das jemand an dem obigen Beispiel erklaeren? Bisher verfahre ich nach der Methode es immer mal mit und ohne this zu probieren :oops:

Im t1 Tutorial funktionierts nur ohne "this", in meiner testapp auch mit.

Danke,
J.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wo willst du this weglassen? Zeig uns mal ein paar Beispiele und wir können darüber reden...
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Code: Alles auswählen

QHttp* http = new QHttp(); 
im Vergleich zu

Code: Alles auswählen

QHttp* http = new QHttp(this); 
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Dazu solltest du dich noch mal genauer mit QObject bzw. mit der Objecthierachie beschäftigen.

Wenn du als parent this angibst, dann wird sich das Parent-Objekt (nämlich 'this') um das zerstören vom Object kümmern. Dies kann aber auch nur funktionieren wenn du deine Objekte per new erzeugst, da du ansonsten die Objekte vom Stack löschen läßt, was in den meisten Fällen zum Absturz führt.

Beim weglassen vom 'this' wirst du dich selbst um das löschen deiner Objekte kümmern müssen.

Wobei du im übrigen nicht immer nur 'this' als Parent angeben mußt, du kannst auch andere QObjects als Parent angeben, in Abhängigkeit davon wer sich um das aufräumen kümmern soll.
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Okay, das wuerde aber bedeuten, dass ich immer beide Varianten zumindest compelieren kann. Wobei das bei mir nicht immer klappt.

Hoere ich bei dir die Empfehlung raus besser immer "this" zu benutzen - anstatt kein parent anzugeben?

Mir ist diese Stelle bei dir nicht ganz klar: "...da du ansonsten die Objekte vom Stack löschen läßt, was in den meisten Fällen zum Absturz führt. .." In welchem Fall loesche ich Objekte vom Stack? Es hoert sich so an also ob das schon beim anlegen der Objekte passiert.

Danke,
J.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

QHttp http(this);
http wird auf dem Stack abgelegt, d. h. ab Ende der Funktion ist es nur noch eine Frage der Zeit bis das Programm abstürzt.
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

und wo wirds bei der "new" version abgelegt?

Danke,
J.
Antworten