• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[C++] Abstrakte Basisklasse, Linker Error: nicht aufgelöstes externes Symbol

tophirsch

erster Hirsch am Platze

Registriert
6 Aug. 2013
Beiträge
929
Ort
hinterm Wald
Hallo zusammen,

also folgendes:
Ich habe eine Klasse mit Methoden, die viel Rechenzeit brauchen, also möchte ich den Fortschritt anzeigen. Das wollte ich realisieren, indem die rechenintensive Klasse ein Member-Objekt bekommt, was verschiedenen Funktionen dafür bereitstellt.
Weil das ganze unabhängig davon sein soll, wie nun später die Funktionen zur Fortschrittsanzeige implementiert werden, habe ich zunächst eine abstrakte Basisklasse erstellt, von der ich dann ableite.

Die Basisklasse sieht erstmal so aus:
[src=cpp]//ProgressReporter.h
typedef unsigned int task_id;

class CProgressReporter
{
public:
virtual ~CProgressReporter(void) = 0;
virtual task_id NotifyNewTask(
void* source
,const std::string& taskName
,const unsigned int& totalStepstoDo) = 0;
virtual void NotifyProceed(task_id& taskId, const int& stepsDone = 1) = 0;
virtual void NotifyDone(task_id& taskId) = 0;
};
[/src]


Die davon abgeleitete Klasse so:

[src=cpp]//ProgressReporterImpl.h
#include "ProgressReporter.h"

class CProgressReporterImpl :
public CProgressReporter
{
public:
CProgressReporterImpl(void);
~CProgressReporterImpl(void);
task_id NotifyNewTask(
void* source
,const std::string& taskName
,const unsigned int& totalStepstoDo);
void NotifyProceed(task_id& taskId, const int& stepsDone = 1);
void NotifyDone(task_id& taskId);

private:
[...]
};
[/src]


In meinem eigentlichen Programm wollte ich das nun so verwenden:

[src=cpp]//main.cpp
CProgressReporter* progRep = new CProgressReporterImpl;

timeConsumingObject.SetProgressReporter(progRep);
[/src]


Ich bekomme aber immer folgende Fehler:

[src=cpp]1>ProgressReporterImpl.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall CProgressReporter::~CProgressReporter(void)" (??1CProgressReporter@@UAE@XZ)" in Funktion "__unwindfunclet$??0CProgressReporterImpl@@QAE@XZ$0".
1>ProgressReporterImpl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall CProgressReporterImpl::NotifyProceed(unsigned int &,int const &)" (?NotifyProceed@CProgressReporterImpl@@UAEXAAIABH@Z)".
1>ProgressReporterImpl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall CProgressReporterImpl::NotifyDone(unsigned int &)" (?NotifyDone@CProgressReporterImpl@@UAEXAAI@Z)".[/src]

Was mache ich falsch? Komisch finde ich, das der Fehler für die Funktion "NotifyNewTask" ja nicht auftritt :unknown:
 

Larius

OutOfOrder

Registriert
12 Juli 2013
Beiträge
5.792
Jetzt mal so ins Blaue geraten, aber bindest du "ProgressReporter.h" in der main.cpp ein? Weil da ist da grad nichts davon zu sehen.
 

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
Larius, wenn er das nicht täte, müsste sich bereits der Compiler (und nicht erst der Linker) beschweren, schliesslich wären dann die Identifier gar nicht definiert. Anhand der Fehlermeldung vermute ich, dass die Implementierung von ProgressReporterImpl (nach tophirschs Namensschema wohl in ProgressReporterImpl.cpp) nicht kompiliert und gelinkt wurde.

Ansonsten wäre ein Minimalbeispiel inklusive aller benötigten Dateien zur Reproduktion des Fehlers von Interesse.
 

Larius

OutOfOrder

Registriert
12 Juli 2013
Beiträge
5.792
Stimmt da hast du Recht *sich ins Eckerl setzt*
 

tophirsch

erster Hirsch am Platze

Registriert
6 Aug. 2013
Beiträge
929
Ort
hinterm Wald
  • Thread Starter Thread Starter
  • #5
Ok, gerade wollt ich mal die ProgressReporterImpl.cpp posten, und da sah ich es:m
Ich habe doch glatt vor den Methoden das "ProgressReporterImpl::" vergessen...
 
Oben