Seite 1 von 1

Fehlermeldung: parameter "xxx" is initialized

Verfasst: 2. Mai 2010 22:52
von qtNiko
hi,

ich erhalte plötzlich diverse Fehlermeldungen beim Compilieren/Linken meines Programms, mit denen ich nichts anfangen kann (Suse Linux und Eclipse CDT).

Ich möchte das Verhalten von zwei functions vergleichen. Jede der functions ist in einem eigenen Modul, d.h. einer eigenen Datei, enthalten.
Beispiel:
func1.c

Code: Alles auswählen

#include "func1.h"
extern struct LINELINK_INIT_PARA linelink_init;   // Fehler1
...
static void histo_clear();   // Fehler2
...
static FLOAT link_radius_sqr = 0;   // Fehler3 und 4
...
static void histo_clear()
 {                                          // Fehler5
... code dazu
}

void test_func() 

Fehlermeldung1: storage class specified for parameter 'linelink_init'
Fehlermeldung2: storage class specified for parameter'histo_clear'
Fehlermeldung3: parameter 'link_radius_sqr' is initialized
Fehlermeldung4: storage class specified for parameter 'link_radius_sqr'
Fehlermeldung5: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token

Das Modul func2.c sieht genauso aus. Hier erhalte ich allerdings keine Fehlermeldungen.

Besonders verwunderlich ist, dass in Fehlermeldung 2 der Prototyp der function histo_clear() als Parameter interpretiert wird.
Die genannten Parameter und functions kommen nur in den beiden Modulen jeweils lokal vor.
Da ich vermutete, dass "static" aus den lokalen Parametern vielleicht globale macht, habe ich mal versuchsweise einen Namen umbenannt, aber die gleiche Fehlermeldung erhalten.

Was heißt "storage class specifiied for..." ?
Der Parameter wird nirgends doppelt initialisiert.

Es muss irgend etwas ganz prinzipielles sein, das ich nicht sehe - vielleicht Matsch auf den Augen (Strichpunkte fehlen keine) :cry:
Vielleicht hat jemand eine Idee - wäre toll, ich stehe auf dem Schlauch.

Verfasst: 3. Mai 2010 07:24
von kater
Ich hätte gern wie immer mehr Code. Um zu sehen welche Dateien andere Dateien inkludieren und ob das mit dem extern so stimmt.

Verfasst: 3. Mai 2010 08:23
von franzf
Mir schaut das alles verdammt nach C-Code aus... (verdammt, steht ja auch "func1.c" drüber... egal jetzt hab ich das schon geschrieben :D)
*) extern struct LINELINK_INIT_PARA linelink_init;
Das "struct" kannst du in C++ streichen. Des weiteren solltest du das extern-Objekt in der Header-Datei deklarieren, das musst du eh includen wenn du linelink_init verwenden willst
*) "static" bei globalen Funktionen geht in C++ viel schöner

Code: Alles auswählen

namespace {
    void histo_clear() {
         ....
    }
}
Nennt sich "anonymer Namensraum"

Weiterhin kommt es mir so vor als hättest du die Fehlermeldungen beschnitten. Da steht sicher noch mehr -> posten!

Wie kompilierst du denn das ganze?

Verfasst: 3. Mai 2010 22:31
von qtNiko
Ich muss euch Frühaufstehern gestehen, dass doch ein ';' gefehlt hat, aber ganz woanders :oops:

Jetzt sind die mir unverständlichen Fehlermeldungen weg. Und dazu muss schon auch gesagt werden, dass der Inhalt von Fehlermeldungen oft eher auf falsche Pfade führt, als hilfreich ist. Zumal die Fehlermeldung nicht dort auftrat, wo der ';' fehlte, sondern an vielen und ganz anderen Stellen.
Meine Erfahrung bisher ist, dass unverständliche Fehlermeldungen in der Regel nicht wörtlich zu nehmen sind und auf grundsätzliche Regelverstöße (fehlender ; oder ähnliches) hinweisen.

Übrigens: es handelt sich natürlich um C-Code, der in eine Qt-GUI eingebunden ist.

Und Danke für eure Mühen nochmals :D

Verfasst: 4. Mai 2010 10:00
von franzf
qtNiko hat geschrieben:Meine Erfahrung bisher ist, dass unverständliche Fehlermeldungen in der Regel nicht wörtlich zu nehmen sind und auf grundsätzliche Regelverstöße (fehlender ; oder ähnliches) hinweisen.
template-Fehlermeldungen sind auch gerne unverständlich :D
Aber trotzdem bitte das nächste mal die ganze Fehlermeldung posten (am besten gleich copy&paste die komplette Meldung des Compilers reinstellen, also den relevanten Teil ^^). Wenn du eh schon unverständliche Fehlermeldungen noch zusätzlich beschneidest, kann man nicht mal sehen, dass es eine unverständliche Fehlermeldung war ;)