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­rere Typen in einer Deklaration.

Der Aus­lö­ser für diese Mel­dung ist sim­pel, aber viel­leicht nicht offen­sicht­lich: Nach der Dekla­ra­tion eines neuen „Typs”, d.h. einer Klasse oder eines Structs, wurde das Semi­ko­lon ver­ges­sen - aller­dings nicht an der Stelle, 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: Irgendwo #inclu­den 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 inclu­des 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 siehe da - hin­ter der Klasse DCEL­Hel­per fehlt das Semi­ko­lon! So ist’s besser:

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

In der Pra­xis ist die betref­fende Stelle übri­gens nicht sooo schwer zu fin­den, weil man ja in der Regel weiß „Ich habe gerade die Klasse Soundso geschrie­ben, jetzt kommt ein Feh­ler - naja, dann wird es wohl auch an eben der Klasse liegen.”

Update: Offen­bar spu­cken neuere Ver­sio­nen des GCC fol­gende, hilf­rei­chere Feh­ler­mel­dung aus: error: expected ‘;’ after class definition Das ist doch mal eine sinn­volle Neuerung! :)

Tags » , «

Trackback: Trackback-URL |  Feed zum Beitrag: RSS 2.0
Thema: Sezierte C++-Käfer

Diesen Beitrag kommentieren.

2 Kommentare

  1. 1
    christian667 

    Wow.. gut erklärt, hat mir echt gehol­fen! Danke!

  2. 2
    Nico 

    Gern gesche­hen! :)

Kommentar abgeben