Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444

    [C++] [Linker error] undefined reference

    sto creando un progetto su 3 file
    - stack.h
    - stack.cpp
    - main.cpp

    mi dà errore di linking

    [Linker error] undefined reference to `stack<int>:op()'

    la classe stack<class item> è definita in stack.h e ha le implementazioni in stack.cpp

    cosa può essere il problema?
    *********************************
    Andrea
    *********************************

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Linki il file stack.cpp quando compili? Il nome e i parametri sono corretti? Come hai definito la funzione pop in stack.cpp?

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    mi dà errore con tutto quanto, cmq stack.cpp e main.cpp sono del progetto, mente stack.h è solo incluso.
    serve tutto il codice?
    *********************************
    Andrea
    *********************************

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    inizia a metter eun po di codice, magari ricopia i file e togli tutti i metodi tranne pop e se ti da il problema posta i file ridotti

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    no cmq il problema lo dà su tutte le funzioni membro

    stack.h
    codice:
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    template <class item>
    class stack 
    {
      private:
        item *s;
        int   n;
        int max;
      public:
        // ---------------------------------------------------------
        // Costruttore della classe
        // Parametro => Capienza massima dello stack (unità)
        // ---------------------------------------------------------
        stack (int);
        
        // ---------------------------------------------------------
        // Verifica se lo stack è vuoto
        // Valori restituiti => 0 (non vuoto) , 1 (vuoto)
        // ---------------------------------------------------------
        bool empty() const;
        
        // ---------------------------------------------------------
        // Inserisce in cima allo stack
        // Parametro => Oggetto da inserire
        // Valore restituito => 1 (push eseguito) , 0 (stack pieno)
        // ---------------------------------------------------------
        bool push (item obj);
        
        // ---------------------------------------------------------
        // Preleva dallo stack
        // Valore restituito => Oggetto prelevato
        // ---------------------------------------------------------
        item pop();    
    };
    stack.cpp
    codice:
    #include "stack.h"
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    template <class item> 
    stack<item>::stack (int num)
    {
      s = new item[num];
      n = 0;
      max = num;
    }
    
    template <class item>
    bool stack<item>::empty() const
    {
      return n == 0;
    }
    
    template <class item>
    bool stack<item>::push (item obj)
    {
      if (n == max)
        return false;
        
      s[n] = obj;
      n++;
      return true;
    }
    
    template <class item>
    item stack<item>::pop()
    {
      if (n == 0)
        return 0;
        
      n--;
      return s[n];
    }
    main.cpp
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <cmath>
    #include "stack.h"
    
    using namespace std;
    
    int valPost (char* exp);
    
    int main(int argc, char *argv[])
    {
      char str[100];
      cin.getline (str,100,'\n');
      cout << valPost (str);
      system("PAUSE");
      return EXIT_SUCCESS;
    }
    
    int valPost (char* a)
    {
      stack<int> sp(strlen(a));
      for (int i = 0; i < strlen(a); i++)
      {
        if (a[i] == '+')
          sp.push (sp.pop() + sp.pop());
        else if (a[i] == '*')
          sp.push (sp.pop() * sp.pop());
        else if (a[i] == '-')
          sp.push (-(sp.pop() - sp.pop()));
        else if (a[i] == '/')
        {
          int d2 = sp.pop();
          int d1 = sp.pop();
          sp.push (d1 / d2);
        }
        else if (a[i] == '%')
        {
          int d2 = sp.pop();
          int d1 = sp.pop();
          sp.push (d1 % d2);
        }
        else if (a[i] == '^')
        {
          int p2 = sp.pop();
          int p1 = sp.pop();
          sp.push ((int)pow((float)p1,(int)p2));
        }
        else if (a[i] >= '0' && a[i] <= '9')
        {
          sp.push (0);
          while (a[i] >= '0' && a[i] <= '9')
          {
            sp.push (10*sp.pop() + (a[i++]-'0'));
          }
        }
      }
      return sp.pop();
    }
    *********************************
    Andrea
    *********************************

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    *********************************
    Andrea
    *********************************

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Io non ho mai lavorato con i template. Il problema potrebbe dipendere da questo (cioè dalla sintassi dei template che non conoscno bene), oppure non linki il file durante la compilazione.. Prova a fare un esempio piu semplice con una classe cha ha una sola funzione e vedi se compila e posta il suo codice

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    sisi lui si perde in fase di linking
    *********************************
    Andrea
    *********************************

  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    prova a fare l'esempio piu semplice

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.