Anzeige:
Ergebnis 1 bis 3 von 3

Thema: [c++] linken - undefined reference zur Methode im Destructor

  1. #1
    waldy
    Gast

    [c++] linken - undefined reference zur Methode im Destructor

    Hallo,

    ich sitzte schon seit Tagen an diesem Linking Problem und hab auch schon ausgiebig die Suchfunktion des Forums benutzt aber komme trotzdem nicht auf eine Loesung.

    Problem:

    Code:
    /tmp/ccKrBmkN.o: In function `TMatrix<double>::~TMatrix()':
    main.cpp:(.text._ZN7TMatrixI7adoubleED1Ev[TMatrix<double>::~TMatrix()]+0x1e): undefined reference to `TMatrix<double>::DelMatrix()'
    collect2: ld returned 1 exit status
    Das eigentliche Programm ist recht gross, daher hab ich mir ein Modell gebastelt, das nur den noetigsten Code enthaelt und den Fehler produziert.
    Laut dem Forum koennte ich in die "matrix.h" Datei die Zeile "#include "matrix.cpp" " einfuegen und damit loest sich das Problem tatsaechlich, allerdings nicht im eigentlichen Programm.

    Ich bin hier ueber Hinweise gestossen, dass es ein haeufiges Problem ist, aber keine Loesung dafuer.

    Ich kompiliere mit:
    Code:
     
    g++  matrix.cpp main.cpp
    Offenbar fehtl da irgendwas wogegen ich linken muss.


    Hier der Modellcode.

    Code:
    //matrix.h
    #ifndef MATRIX_H
    #define MATRIX_H
    
    #include <stdlib.h>
    #include <stdio.h>
    
    template<class T> class TMatrix 
    {
    
    public:
      int  cols, rows;  
      int  ElementSize; 
      T    **p;         
      int  SleepFlag;
      
      TMatrix(){
        cols=0;
        rows=0;
        p   =0; 
        SleepFlag=0;
        ElementSize = sizeof(T);
      };  
    
      ~TMatrix(){ 
        if (p!=0){ 
         DelMatrix();
        } 
       };
    
      void DelMatrix();
      void DelMat(){ DelMatrix(); };
    };
    
    #endif 
    
    
    //matrix.cpp 
    
    #ifndef MATRIX_CPP
    #define MATRIX_CPP
    
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <math.h>
    #include "matrix.h"
    
    template<class T>
    void TMatrix<T>::DelMatrix()
    { 
      if (p!=0){
        delete[] p[0];
        delete[] p;
      };
      rows=0;
      cols=0;
      p   =0;
      SleepFlag=0;
    };
    
    #endif
    
    //main.cpp
    #include "matrix.h"
    
    int main(){
    
     TMatrix<double> tm;
      
    
    return 0;
    }

    Ich hoffe jemand hat einen kleinen Hinweis fuer mich, was man da machen koennte.

    Danke.
    Gruss,
    waldy
    Geändert von waldy (16-05-2010 um 09:10 Uhr)

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Weil du in der Header ein Methode definierst aber diese nicht im Quelltext verwendest bekommst du diese Meldung.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    ... Die Konsequenz daraus ist, daß du nicht umhin kommen wirst auch in main.cpp matrix.cpp zu inkludieren.

    Um deutlich zu machen, daß es sich um nicht separat zu kompilierenden Quellcode handelt, könntest du noch matrix.cpp in matrix_def.h, oder matrix_def.cpp oder matrix_templates.hh oder ähnliche umbennen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •