Problem mit Variablendeklaration
-
Aus der NNLib habe ich folgende Zeilen:
class Node { // blubb } //... template <class LINK, class NODE,class INSERTER> std::istream& readLinks(std::istream &i,INSERTER ins,const std::map<std::string,NODE*> &where) { LINK *l;NODE *from,*to;std::string s,t; std::map<std::string, NODE* >::const_iterator f; // <- Problema //... usw }Beim Versuch das Ganze mit g++ zu compilieren gibt's dazu die Meldung
src/NNLib-0.1/graph.h:234: error: expected ';' before 'f'
Wo koennte hier das Problem liegen?
Schreibe ich spasseshalber int statt NODE*, gibt es zwar keine Fehler, kann aber nicht Sinn der Sache sein.
Setze ich vor das f ein ";", gibt es auch keine neuen Fehler, ausser dass f dann natuerlich nicht mehr definiert ist.Verwendet wird g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
-
Wenn ein Member-Typ (hier
const_iterator) von Template-Parametern (hierNODE) abhängt, musst du das Schlüsselworttypenameverwenden:typename std::map<std::string, NODE* >::const_iterator f;Das erklärt auch, warum es mit
intgeht.
-
Jo, das scheint's gewesen zu sein.
Man, dieser ganze Frickel-Code hier steckt wirklich voller Tuecken.
Aber gut zu wissen. Danke. Wenn ich dieses Projekt ueberstanden habe, brauche ich wenigstens anschliessend ein C++-Buch hoffentlich nur noch als Referenz.
-
Zu frueh gefreut: Noch so'n Ding. Hat wahrscheinlich was mit der Sache zu tun und kommt aus der selben Lib...
Diesmal bekomme ich folgendes:
error: too few template-parameter-lists
und hier der Code dazu:
void NeuralNet::setInput(const std::vector<double> &inV) throw (length_error) { if (inV.size() != VI.size()) throw length_error("inputsize"); // so geht's: //vector<InputTerminal*>::const_iterator i=VI.begin(); //vector<double>::const_iterator v=inV.begin(); // wenn ich aber hier deklariere, geht's nicht: for (vector<InputTerminal*>::const_iterator i=VI.begin(), vector<double>::const_iterator v=inV.begin(); // <- in der Zeile gibt's den Fehler i != VI.end(); i++, v++) { (*i)->set(*v); } };Was laeuft diesmal falsch?

-
Das funktioniert genausowenig wie
int i=2, double j=5;Was funktioniert ist so etwas:
int i=2, j=5;und so etwas:
int i=2, *j=0;Es darf nur ein Typ-Spezifizierer auftauchen und ein oder mehrere Deklaratoren.
int i=2, *j=0; ^^^ ^ ^^ TS D1 D2 TS = Typ-Spezifizierer D1, D2 = Deklaratoren
-
Du kannst in einer for-Schleife nicht zwei verschiedene Variablentypen deklarieren, d.h.
for(int x, double y; ;)würde genauso zu einem Fehler führen (das solltest du aber wissen ;-).
Also mindestens eine Variable vor der Schleife daklarieren.Und dein geposteter Code steht original so in der NNLib? Welcher Compiler schluckt das denn (als Erweiterung)?
-
Ok, danke.

Ne, ich habe keinen Peil von C++.
Musste mich (zum Glueck) bisher nicht naeher damit befassen. 
Ich bin davon ausgegangen, man kann mit Komma statt Semikolon getrennt quasi Beliebiges in dieses for-Dingsi reinpacken...
Also original steht die Deklaration auch davor. Aber anders. Die Zuweisungen stehen dafuer noch in der for-Schleife. So:
void NeuralNet::setInput(const std::vector<double> &inV) throw (length_error) { if (inV.size() != VI.size()) throw length_error("inputsize"); InputTerminal** i; double* v; // hier meckert g++ dann, dass die Typen nicht zusammen passen... for (i=VI.begin(), v=inV.begin(); i != VI.end(); i++, v++) { (*i)->set(*v); } };