Methode aufrufen -> Fehler: . was not declared [gelöst]

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Methode aufrufen -> Fehler: . was not declared [gelöst]

Beitrag von Bang-Johansen »

Hallo,

habe da ein kleines Problem.
Ich habe eine Klasse erstellt:

kommunikation.h

Code: Alles auswählen

#ifndef KOMMUNIKATION_H
#define KOMMUNIKATION_H

#include <QtCore/QObject>

class AbstractSerial;
class Kommunikation : public QObject
{
    	Q_OBJECT

	public:
	
		// Konstruktor und Destruktor anlegen 
		Kommunikation(QObject *parent = 0);
    		~Kommunikation();

		// Methoden deklarieren
		void Test ();
		void SetBaudRate (long int baudrate);
	
	private:
		// verwendeter Zugriff
		AbstractSerial *port;
		
		
};

#endif 

kommunikation.cpp

Code: Alles auswählen

#include <QtCore/QTimer>
#include <QtCore/QDebug>
#include <QtCore/QTimer>

#include <abstractserial.h>
#include "kommunikation.h"

#include <iostream>

using namespace std;


Kommunikation::Kommunikation(QObject *parent) : QObject(parent)

	{
	port = new AbstractSerial(this);
	port->setDeviceName("/dev/ttyUSB0");
	port->open(AbstractSerial::WriteOnly | AbstractSerial::Unbuffered);
	}


Kommunikation::~Kommunikation()

	{
    	port->close();
	}



void Kommunikation::SetBaudRate (long int baudrate)

	{
	switch (baudrate)
		
		{
		case 1200:
				{
				port->setBaudRate(AbstractSerial::BaudRate1200);
				break;
				}	
				
		case 2400:
				{
				port->setBaudRate(AbstractSerial::BaudRate2400);
				break;
				}	
			
		case 4800:
				{
				port->setBaudRate(AbstractSerial::BaudRate4800);
				break;
				}	
				
		case 9600:
				{
				port->setBaudRate(AbstractSerial::BaudRate9600);
				break;
				}			
				
		case 14400:
				{
				port->setBaudRate(AbstractSerial::BaudRate14400);
				break;
				}			
			
		case 19200:
				{
				port->setBaudRate(AbstractSerial::BaudRate19200);
				break;
				}
	
		case 38400:
				{
				port->setBaudRate(AbstractSerial::BaudRate38400);	
				break;
				}
				
		case 56000:
				{
				port->setBaudRate(AbstractSerial::BaudRate56000);
				break;
				}			
				
		case 76800:
				{
				port->setBaudRate(AbstractSerial::BaudRate76800);
				break;
				}			
				
		case 115200:
				{
				port->setBaudRate(AbstractSerial::BaudRate115200);
				break;
				}			
				
		default:
				{
				port->setBaudRate(AbstractSerial::BaudRate9600);	
				qDebug () << "Falscher Wert für Baudrate -> schalte auf Standardwert 9600 um";
				break;
				}

		}	
	}


void Kommunikation::Test ()

	{
	port->write("Hallo Steuerung\n");	
	}

main.cpp sieht so aus:

Code: Alles auswählen


#include "test.h"
#include <QDesktopWidget>
#include <QApplication>
#include <QtCore/QCoreApplication>
#include <abstractserial.h>
#include "kommunikation.h"


int main(int argc, char *argv[])
{
	QApplication app(argc, argv);

	Kommunikation Schnittstelle;
  
	Schnittstelle.SetBaudRate (38400);
	Schnittstelle.Test();

 
	Test window;

  	window.setWindowTitle("Test");
  	window.setGeometry(10, 10, 1024, 768);
  	window.show();
  
  	return app.exec();
 
}

und test.cpp

Code: Alles auswählen


#include "test.h"
#include <abstractserial.h>
#include <QMenu>
#include <QMenuBar>
#include <QApplication>
#include <QMessageBox>
#include <iostream>
#include <QInputDialog>
#include <QPalette>
#include <kommunikation.h>



Test::Test(QWidget *parent) : QMainWindow(parent)

	{
    
  	// Schaltflächen erzeugen
  	//QPushButton *ende = new QPushButton("Ende", this);
  	//ende->setGeometry(50, 40, 90, 30);
  	start = new QPushButton("Start", this);
  	start->setGeometry(200, 40, 90, 30);
 
    	taste = new QPushButton("Stop", this);
	taste->setGeometry(50, 40, 90, 30);
	//connect(start, SIGNAL(pressed()), qApp, SLOT(quit()));
  	//connect(start, SIGNAL(pressed()), this, SLOT(senden()));
	connect(start, SIGNAL(pressed()), this, SLOT(senden()));
	
	connect(taste, SIGNAL(clicked()), this, SLOT(addItem()));
	
	}

void Test::senden()
	{
   	start->setStyleSheet( "background-color: green;" );	
	taste->setStyleSheet( "background-color: yellow;" );
	Schnittstelle.Test();  -< funktioniert nicht
	}

test.h

Code: Alles auswählen


#ifndef TEST_H
#define TEST_H

#include <QMainWindow>
#include <QPushButton>
#include <QRadioButton>
#include <QLabel>
#include <QVBoxLayout>
#include <QListWidget>
#include <kommunikation.h>



class Kommunikation;
class Test : public QMainWindow
	{
	Q_OBJECT
	
	public:
    		Test(QWidget *parent = 0);
    		//QPushButton *taste;
    		//QLabel*      label;
    		//QVBoxLayout* layout;
		QPalette*	pal;
	
	private:
		QPushButton *taste;
		QPushButton *start;
		QListWidget *lw;


		
	public slots:
     		void senden();
		
	private slots:
		void addItem();
		
		
		
    
   };

#endif

So jetzt mein Problem.

Der Aufruf von Schnittstelle.Test(); in main funktioniert ohne Probleme.

Wenn ich jetzt aber die Methode in void Test::senden() aufrufen möchte,
bekomme ich folgende Fehlermeldung:

test.cpp: In member function 'void Test::senden()':
test.cpp:38: error: 'Schnittstelle' was not declared in this scope

Anscheinend findet er die Methode nicht.
Habe schon in Büchern und im Internet gewühlt, aber keine richtige Lösung gefunden.


Wie muß ich die Funktion richtig aufrufen ?

Danke für Eure Hilfe

Bang-Johansen
Zuletzt geändert von Bang-Johansen am 22. November 2011 20:05, insgesamt 1-mal geändert.
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Re: Methode aufrufen -> Fehler: . was not declared in this s

Beitrag von Bang-Johansen »

Hallo,

ich habe das Problem teilweise gelöst.

In test.h habe ich unter

private:
// andere Klasse einbinden
Kommunikation versuch;


eingefügt.
Und kann dann mit

Versuch.Test ();

auf die Methode zugreifen.
Das Problem ist jetzt, daß die Methode Kommunikation::Test zwar ausgeführt wird
(Ausgabe mit qDebug in dieser Methode bestätigt das -> Aufruf ! wird auf der Konsole ausgegeben)
void Kommunikation::Test ()

{
port->write("Hallo Steuerung\n");
qDebug () << "Aufruf !";
}
aber auf die serielle Schnittstelle wird nichts ausgegeben.

Direkter Aufruf in main.cpp funktioniert wieder.

Muß ich der Klasse Kommunikation beim Aufruf durch eine andere Klasse noch irgendwas übergeben ?


bang-Johansen
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Re: Methode aufrufen -> Fehler: . was not declared [gelöst]

Beitrag von Bang-Johansen »

Hallo,

ich habe den fehler gefunden.

In der kommunikation.h

"Kommunikation ();"

statt

"Kommunikation(QObject *parent = 0);"

und dementsprechend in der kommunikation.cpp

"Kommunikation::Kommunikation()"

statt

"Kommunikation::Kommunikation(QObject *parent) : QObject(parent)"

eingetragen und die Daten werden brav bei jedem Klick auf den Button per RS232 übertragen.

Ich dachte, diese Einträge werden benötigt, da die Qserial eine QT Lib ist, oder ?

mfg

Bang Johansen
Antworten