Einbinden von Header ergibt Fehler in durch Klasse



  • Hi,
    wie in diesem Thread schon geschrieben arbeite ich gerade an einem Funktionsplotter...
    Bevor ich nun den Parser einbaue sollte es erst einmal mit einer im Quelltext festgelegten Funktion funktionire...
    Dazu habe ich in der Datei function.h ein Klasse wie folgt angelegt:

    class function {
    public:
    		virtual double value (double x);
    };
    
    //näher beschrieben (NUR ALS BEISPIELFUNKTION) durch:
    
    double function::value (double x){
    	return sin(1/x);
    }
    

    Dann binde ich diesen Header in plot.cpp ein:

    //die includes:
    #include "plot.h"
    #include "draw.h"
    #include "function.h"
    #include "text.h"
    
    const double diff = 0;
    const int D=5;
    
    //using namespace std;
    
    #include "SDL.h"
    #include "SDL_ttf.h"
    
    //die Verwendung:
    
    void DrawScene(SDL_Surface *screen, TTF_Font *font, SDL_Rect dest, double *interval){
      Slock(screen);
      function *f = new function;
    
      //define needed parameters:
      double xscal = xscale(dest,interval);
      double *values;
      calcvalues(f,dest,xscal,interval,&values);;
      double yscal = yscale(dest,values);
      int * xcoordinates;
      int *ycoordinates;
      calccoordinates(values,dest,yscal,&xcoordinates,&ycoordinates);
      //
      DrawFunction(screen,dest,xcoordinates,ycoordinates,255,255,255);
      //
      calccoorsystem(screen,dest,values,interval,xscal,yscal,xcoordinates,ycoordinates,10,10,font,255,255,255);
      //
      Sulock(screen);
      SDL_Flip(screen);
    }
    

    Will ich nun function.h noch in einer anderen Datei einbinden, so z.B. in plot.h oder main.cpp, so erhalte ich den Fehler:

    plot.obj : error LNK2005: "public: virtual double __thiscall function::value(double)" (?value@function@@UAENN@Z) ist bereits in main.obj definiert.
    

    Plattform: VC++ 2008

    Kann mir jemand sagen, woran das liegt???

    LG Ben-ny



  • Fehlende Headerguards?

    Ansonsten Build mal neu. Hatte ich auch mal.



  • Wenn du mit Headerguards das hier meinst:

    #ifndef PLOT_H
    #define PLOT_H
    
    #include "SDL.h"
    #include "SDL_ttf.h"
    
    #include "function.h"
    
    void DrawScene(SDL_Surface *screen, TTF_Font *font, SDL_Rect dest, double *interval);
    
    #endif
    

    , dann kann das nicht der Fehler sein!

    Und wenn ich das neu kompilieren ("Projektmappe neu erstellen"), dann kommt er gleiche Fehler...



  • Achso und bei function.h :

    [cpp]#ifndef FUNCTION_H
    #define FUNCTION_H

    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>

    class function {
    public:
    virtual double value (double x);
    };

    double function::value (double x){
    return sin(1/x);
    }

    #endif
    [code]

    Entschuldigt bitte den Doppelpost!



  • double function::value (double x){
    return sin(1/x);
    }

    muss in function.cpp, nicht in die Header.



  • Verdammt...so trivial!!!
    Danke Leute - ihr seid Spitze!!!

    LG Ben-ny



  • Ich wollte meinem Lehrer gerade eine Vorab-Version des Plotters schicken...
    Da er kein VC++ hat, wollte ich dies als Release-Version tun, allerdings erhalte ich nun die Fehlermeldung:

    MSVCRT.lib(crtexe.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_main".
    

    Begleitet von:

    draw.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_LockSurface".
    draw.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_UnlockSurface".
    draw.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_MapRGB".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_Init".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_SetVideoMode".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_PollEvent".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_TTF_OpenFont".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_TTF_CloseFont".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_TTF_Init".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_GetError".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_TTF_Quit".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_Quit".
    main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_FreeSurface".
    plot.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_Flip".
    text.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_TTF_RenderText_Solid".
    text.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_UpperBlit".
    

    Woran könnte das liegen?
    Was sind mögliche Ursachen für derartige Fehlermeldungen?!?



  • Wahrscheinlich daran, dass du die libs in der Release Version nicht mitlinkst..



  • Aber nicht mal die CRT? Wie sieht denn dein modularer Aufbau aus, wo steht z.B. die main() -Funktion?



  • OK, war wirklich so einfach! Hab den Linker für die Release-Version vergessen! 😮


Anmelden zum Antworten