Home

Das Semikolon aus einer anderen Welt

Dienstag, 25. Januar 2011 | Autor:

#include "../../math/src/FInterpolation.hh"

/** Interface class for seed lines such as lines, curves, polylines. */
class SeedCurve
{
	public:
		virtual FPosition ipol(double t) = 0;
		virtual vector<FPosition> getPositions(positive number_of_seeds) = 0;
};

gibt eine Fehlermeldung:

SeedLine.hh:9:1: error: multiple types in one declaration

Meh­re­re Typen in einer Deklaration.

Der Aus­lö­ser für die­se Mel­dung ist sim­pel, aber viel­leicht nicht offen­sicht­lich: Nach der Dekla­ra­ti­on eines neu­en „Typs”, d.h. einer Klas­se oder eines Structs, wur­de das Semi­ko­lon ver­ges­sen - aller­dings nicht an der Stel­le, die die Feh­ler­mel­dung nennt! 😉

Wie bei ver­ges­se­nen Semi­ko­lons üblich, wirkt sich der Feh­ler erst spä­ter im Code aus. Spe­zi­ell bei Fäl­len wie die­sem liegt die Ursa­che des Feh­ler oft sogar in einer ganz ande­ren Datei!

In unse­rem Bei­spiel sieht das so aus: Irgend­wo #includen wir ein paar Hea­der - unter ande­rem den, den uns die Feh­ler­mel­dung nennt:

#include "DCELHelper.hh"
#include "SeedLine.hh"

Der Prä­pro­zes­sor löst die includes auf und macht dar­aus folgendes:

class DCELHelper
{
    ...
}

class SeedCurve
{
	public:
		virtual FPosition ipol(double t) = 0;
		virtual vector <FPosition> getPositions(positive number_of_seeds) = 0;
};

und sie­he da - hin­ter der Klas­se DCEL­Hel­per fehlt das Semi­ko­lon! So ist’s besser:

class DCELHelper
{
    ...
}; // <-hier

In der Pra­xis ist die betref­fen­de Stel­le übri­gens nicht sooo schwer zu fin­den, weil man ja in der Regel weiß „Ich habe gera­de die Klas­se Sound­so geschrie­ben, jetzt kommt ein Feh­ler - naja, dann wird es wohl auch an eben der Klas­se liegen.”

Update: Offen­bar spu­cken neue­re Ver­sio­nen des GCC fol­gen­de, hilf­rei­che­re Feh­ler­mel­dung aus: error: expected ‘;’ after class definition Das ist doch mal eine sinn­vol­le Neuerung! 🙂

Tags » , «

Trackback: