Not declared in scope und solche Dinge [geloest]

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

Not declared in scope und solche Dinge [geloest]

Beitrag von joebar »

Hallo,

nach langer Pause immer noch mein altes Problem...

Ich habe folgende Klassen:

Code: Alles auswählen

testapp : public QMainwindow
mywidget : public QWidget
Add : public mywidget
Sub : public mywidget
Fuer jede Klasse habe ich ein .cpp und ein .h File. Das UI ist ueber den Designer erstellt und wird im Konstruktor von testapp aufgebaut. Im UI gibt es ein lineedit mit dem Namen c1.

In Add.cpp habe ich jetzt folgenden code eingefuegt:

Code: Alles auswählen

void Add::calc(){
c1 -> setText("bla");
return;
}
Da kommt dann

Code: Alles auswählen

error 'c1' was not declared in this scope
Der gleiche Code in testapp.cpp funktioniert. Die Aufteilung ueber diverse Files moechte der Uebersicht wegen erreichen.

Das komplette Coding ist mal angehangen.

Danke,
J.
Dateianhänge
testapp.tar.gz
(33.08 KiB) 159-mal heruntergeladen
Zuletzt geändert von joebar am 26. Februar 2007 15:32, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Und warum deklarierst du dann c1 nicht bei Add? Und nein, du verwendest in testapp.cpp nicht den selben Code...
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

okay WUERDE ich den Code in testapp.cpp haengen klappts.... war sprachlich wohl etwas ungenau.

Tja mit dem deklarieren ist das so eine Sache. Das c1 kommt ueber den designer rein, ich habe es also nirgends expliziert deklariert. Wie soll ich das denn machen?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Genauso wie in testapp.cpp...
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Da habe ich es doch impliziet mit dem include von testapp.h gemacht. Wenn ich in Add.cpp nun aber #include "testapp.h" rein setze dann bringt mir das rein gar nichts.

Kannst du mir einen noch etwas konkrteren Tip geben?

Danke,
J.
horchi
Beiträge: 7
Registriert: 22. Februar 2007 07:32

Beitrag von horchi »

Hi joebar,

c1 ist ein Member der Klasse testapp, nicht der Klasse Add, daher dort nicht bekannt. Du könntest Add einen Pointer auf die Instanz von testapp übergeben und dann über diesen auf c1 zugreifen. Wenn es das ist was du möchtest?
Nur wird m.E. die Methode Add::calculate_add() noch nirgends aufgerufen, ....

Grüße
horchi
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

wird auch nocht nicht aufgerufen. will erstmal das scope Problem loesen.

Der Vorschlag mit dem Pointer, na ja momentan habe ich nur c1, spater habe ich hundert Objekte und dann muss ich irgendwie (wie auch immer) hundert Pointer uebergeben. Das ist irgendwie nicht elegant.

Mir geht es nur darum meinen Sourcecode in verschiedene Files zu verteilen damit hinterher das warten einfacher wird. Bin also offen fuer alle Vorschlaege, der von mir gewaehlte Ansatz wurde mir hier mal vorgeschlagen.

Danke,
J.
horchi
Beiträge: 7
Registriert: 22. Februar 2007 07:32

Beitrag von horchi »

Hi,
irgendwie (wie auch immer) hundert Pointer uebergeben.
nein, wie gesagt nur den der Klasse testapp. Das könntest du z.B. im Konstruktor machen

Code: Alles auswählen

Add:Add(testapp* pApp)
{
  app = pApp;
}
und über diesen Pointer auf die Dialogelemente Zugreifen:

Code: Alles auswählen

app->c1->setText(".....")
/EDIT Ups war noch nicht fertig und bin auf senden gekommen :?
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

das ergibt dann

Code: Alles auswählen

g++ -c -pipe -fno-strict-aliasing -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_SHARED -I/usr/share/qt/mkspecs/default -I. -I/usr/include/QtGui -I/usr/include/QtCore -I/usr/include -I. -I. -I. -o Add.o Add.cpp
Add.cpp:5: error: prototype for ‘Add::Add(testapp*)’ does not match any in class ‘Add’
Add.h:6: error: candidates are: Add::Add(const Add&)
Add.h:8: error:                 Add::Add()
Add.cpp: In constructor ‘Add::Add(testapp*)’:
Add.cpp:6: error: ‘app’ was not declared in this scope
Add.cpp: In member function ‘void Add::calculate_add()’:
Add.cpp:26: error: ‘app’ was not declared in this scope
make: *** [Add.o] Error 1

horchi
Beiträge: 7
Registriert: 22. Februar 2007 07:32

Beitrag von horchi »

Hi,

dass sollte kein fertiges Programm sondern nur ein Lösungsvorschlag sein. Du musst min noch den Header entsprechend anpassen:

Add.h

Code: Alles auswählen

#ifndef ADD_H
#define ADD_H

#include "testapp.h"
#include "mywidget.h"

class Add : public mywidget
{
   public:

      Add(testapp* pApp);
      ~Add();
      
      void calculate_add();

   private:

       testapp* app;
};

#endif
Grüße
horchi
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Manchmal frage ich mich ob das Forum hier C++ für Anfänger heisst... :roll:

Wir sind ein Qt-Forum. Und Qt kann man nur lernen wenn man zumindest die Grundlagen C++ versteht! Also kauft ein ein C++ Buch oder schaut im Netz.
MfG Christian

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

Beitrag von joebar »

Danke fuer die nette Antwort.

Auch wenn du es dir vielleicht nicht vorstellen kannst es gibt Leute die durchaus auch noch Probleme mit c++ haben. Ich hatte meine Frage auch zu erst in einem C++ Forum gestellt, leider konnte man da mit dem Qt Code nichts anfangen. Achso, und nein ich will nicht irgendwelche Kommandozeilentools schreiben, die Anwendung die ich schreiben moechte braucht ein GUI.

Fuer wen meine Frage unter Niveau ist braucht nicht zu antworten, das ist schon okay. Freue mich natuerlich trotzdem ueber sinnvolle Antworten.

Konstruktiver Vorschlag: Wie waers mit einer Kategorie Anfaengerfragen? Dann fuehlt sich im Profiforum vielleicht keiner belaestigt?

Danke,
J.

PS: Man bekommt in C++ Foren auch schonmal die Antwort man solle erst C lernen. Wahrscheinlich wuerde man im C Forum erstmal auf Basic verwiesen und dort dann auf Niki den Roboter.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Der vom Compiler generierte Fehler ist für jemanden, des halbwegs C kann durchaus sehr verständlich, oder was kann man an "error: prototype for ‘Add::Add(testapp*)’ does not match any in class ‘Add’ " nicht verstehen?
Ihr wollt immer alles vorgekaut haben (was man schon daran sieht dass Du einfach per copy'n'paste kopiert hast ohne Dich auch nur im geringsten damit zu befassen, sonst hätte man die Fehlermeldung auch sehr schnell kapiert) - das ist das Problem das ich hier habe. Einen Anfänger bei dem ich sehe dass er sich auch damit befasst was man ihm versucht zu erklären helfe ich gerne.
MfG Christian

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

Beitrag von joebar »

Ich habe nie behauptet, dass C nicht helfen wuerde was zu verstehen. Ist nur die Frage ob man einem sagt der portugiesich lernen will lern erstmal spanisch und man dem sagt lern erstmal italianisch und dem man soll erstmal latain lernen.

Du hast Recht ich habe copy 'n' paste gemacht, aber wenn mir jemand einen Code anbietet ist das wohl auch der erste Schritt den man macht. Du hast allerdings kein Recht wenn du behauptest ich haette mir keine Gedanken gemacht. Wenn ich das sagen darf halte ich es fuer sehr unhoeflich erstmal anzunehmen man habe nicht nachgedacht oder habe Google nicht bemueht. Man sollte doch erstmal seinem Gegenueber positiv begegnen. Ich bin Anfaegner, ich habe im Schnitt vielleicht in der Woche ca.. 1 Stunde wo ich mich mit dem Thema C++/Qt befassen kann. Ich komme also nur langsam voran.

Wie gesagt ich bin gerne bereit im dummy Forum zu posten. Bin auch gerne bereit wenn ich ein paar Grundgerueste habe einen How to Guide fuer euer Forum zu schreiben "How to start Qt for C++ newbies". Ich glaube das koennte fuer viele Leute hilfreich sein. Wenn einer C++ lernt will er nunmal was machen was sexy ist und das sind GUI Programme und keine Kommandozielen Tools. Vielleicht motiviert das Angebot ja zu etwas unterstuetzung, bin durchaus bereit etwas zurueck zu geben.

Ich bin mir sicher dass du als du C++/Qt gelernt hast dich mit Kollegen/Freunden/Kommilitonen ueber Probleme ausgetauscht hast, da faellt eine dumme Frage nicht schnell auf. Rein ueber Foren zu lernen ist ungleich schwerer.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich sehe Du meinst es wirklich ernst. Das ist schön.
Allerdings muss ich nochmal drauf rumhacken - was ist an dieser Fehlermeldung so schlimm bzw. schwer zu verstehen:

prototype for ‘Add::Add(testapp*)’ does not match any in class ‘Add’

Er findet den Prototyp Add:Add(testapp*) nicht in der Klasse Add. Also schaue ich in der Klasse Add nach und siehe da - der ctor ist wirklich nicht da. Also ist da was falsch - entweder im Header oder in Source. Und da der Sinn war testapp der Klasse zu übergeben würde ich sagen der Header war falsch.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten