Fehler, der kein Fehler ist

sunmania

Mitglied
hallo,

ich habe hier eine Funktion erstellt und mein Compiler gibt einen Fehler aus.

sstudent.h

Code:
#ifndef _sstudentH_
	#define _sstudentH_

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>

using namespace std;

class sstudent {
	private:
		static GtkWidget *window, *table, *text, *label, *image, *entry, *textbox;
		static fstream students;
	
	public:
		sstudent();
		
};

#endif

und mein sstudent.cpp
Code:
#include "sstudent.h"

GtkWidget *sstudent::window, *sstudent::table, *sstudent::text, *sstudent::label, *sstudent::image, *sstudent::entry, *sstudent::textbox;
fstream sstudent::students;

sstudent::sstudent() {

string name;
	cout << endl;
	cout << "  Bitte geben Sie zu aller Erst nur den Nachnamen des Schuelers an,\n";
	cout << "  den Sie suchen moechten, im 2. Durchlauf koennen Sie dann die\n";
	cout << "  ID des Schuelers angeben, um eine nur seine Daten zu erhalten.\n\n";
	cout << "  Nachname des Schuelers:  ";
	cin >> name;

	students.open("db/students.txt");

	vector<string> zeilen;

	while(! students.eof())
	{
		string z;
// read line
		students >> z;
// but into vector 
		zeilen.push_back(z);
	}

	for(size_t i=0; i<zeilen.size(); ++i)
	{
		if(zeilen[i] == name)
		{
			cout << "  Schuelerdaten:\n\n";
			cout << "  ID: \t\t\t" << zeilen[i-2] << endl;
			cout << "  Vorname: \t\t" << zeilen[i-1] << endl;
			cout << "  Nachname: \t\t" << zeilen[i] << endl;
			cout << "  PLZ: \t\t\t" << zeilen[i+1] << endl;
			cout << "  Ort: \t\t\t" << zeilen[i+2] << endl;
			cout << "  =====================================\n";
		}
	}
	students.close();

	students.open("db/students.txt");

string id;
	cout << endl;
	cout << "  ID des Schuelers:  ";
	cin >> id;

	while(! students.eof())
	{
		string z;
// read line
		students >> z;
// but into vector 
		zeilen.push_back(z);
	}

	for(size_t i=0; i<zeilen.size(); ++i)
	{
		if(zeilen[i] == id)
		{
			cout << "  Schuelerdaten:\n\n";
			cout << "  ID: \t\t\t" << zeilen[i] << endl;
			cout << "  Vorname: \t\t" << zeilen[i+1] << endl;
			cout << "  Nachname: \t\t" << zeilen[i+2] << endl;
			cout << "  PLZ: \t\t\t" << zeilen[i+3] << endl;
			cout << "  Ort: \t\t\t" << zeilen[i+4] << endl;
			cout << "  Strasse: \t\t" << zeilen[i+5] << endl;
			cout << "  Hausnummer: \t\t" << zeilen[i+6] << endl;
			cout << "  Telefonnummer: \t" << zeilen[i+7] << endl;
			cout << "  Tutor: \t\t" << zeilen[i+8] << endl;
			cout << "  =====================================\n";
		}
	}
	students.close();

}

static GtkWidget *student_search_box()
{
    GtkWidget *box;
    box = gtk_hbox_new (FALSE, 0);
    gtk_container_set_border_width (GTK_CONTAINER (box), 2);
    table = gtk_table_new(4, 4, FALSE);
    label = gtk_label_new ("Geben Sie hier den Nachnamen des gesuchten Schülers ein, um seine ID zu ermitteln");
    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL , GTK_FILL, 2, 2);
    label = gtk_label_new ("Nachname");
    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL , GTK_FILL, 2, 2);
    label = gtk_entry_new ();
    gtk_table_attach(GTK_TABLE(table), label, 1, 3, 1, 2 GTK_FILL , GTK_FILL, 2, 2);
    label = xpm_label_box ("",Suchen);
    gtk_table_attach(GTK_TABLE(table), label, 3, 4, 1, 2, GTK_FILL , GTK_FILL, 2, 2);

    gtk_box_pack_start (GTK_BOX (box), table, FALSE, FALSE, 3);
    gtk_widget_show (table);
    return box;
}

static GtkWidget *xpm_label_box( gchar *xpm_filename, gchar     *label_text )
{
    GtkWidget *xbox;
    GtkWidget *xlabel;
    GtkWidget *ximage;
    xbox = gtk_hbox_new (FALSE, 0);
    gtk_container_set_border_width (GTK_CONTAINER (xbox), 2);
    ximage = gtk_image_new_from_file (xpm_filename);
    xlabel = gtk_label_new (label_text);
    gtk_box_pack_start (GTK_BOX (xbox), ximage, FALSE, FALSE, 3);
    gtk_box_pack_start (GTK_BOX (xbox), xlabel, FALSE, FALSE, 3);
    gtk_widget_show (ximage);
    gtk_widget_show (xlabel);
    return xbox;
}

und der Fehler:

Code:
sstudent.h:15: Fehler: ISO-C++ verbietet Deklaration von »GtkWidget« ohne Typ
sstudent.h:15: Fehler: expected »;« before »*« token
sstudent.h:15: Fehler: ISO-C++ verbietet Deklaration von »GtkWidget« ohne Typ
sstudent.h:15: Fehler: expected »;« before »*« token
sstudent.cpp:3: Fehler: expected constructor, destructor, or type conversion before »*« token
sstudent.cpp:81: Fehler: expected initializer before »*« token
sstudent.cpp:101: Fehler: expected initializer before »*« token

ich hoffe es kann jemand helfen. danke im vorraus

gruß
 
Hi,

da fehlt die Klasse, in der GtkWidget deklariert ist. Außerdem brauchst du im private Bereich deiner Klasse das static nicht, dass sind die Variablen schon automatisch:)

Gruß
cesupa
 
Warum sollen Klassenvariablen denn static sein?
Eine static-Var gibt es für alle Objekte dieser Klasse einmal gemeinsam-aber das ist doch nicht der normalfall.
 
Zurück