错误LNK2019:CATCH中未解析的外部符号,但为什么?

时间:2014-01-18 18:34:18

标签: c++ linker-errors

我在2天内遇到错误LNK2019问题。试图解决这个问题。

所以我的小项目如下所示:

polynomial.h:

#pragma once
#include <iostream>
#include <sstream>
#include <fstream>
#include <exception>
#include<exception>
#include<string>
using namespace std;

/**
 *  Klasa definiująca wyjątek wykorzystywany w klasie {\link polynomial polynomial}
 *  \version 1.0
*/
class MojException : public exception
{
  private:
    /** Przechowywanie komunikatu bledu */
   // string s;
    string error;
public:
    // static const string error[]
    /** Konstruktor podstawowy 
     *  \param ss komunikat bledu
     */
    MojException(string ss) throw();
    /** Destruktor 
     */
    virtual ~MojException() throw();
    /** Wypisywanie komunikatu błędu
    * \return tablica znakow typu char
     */
    virtual const char* what() const throw();
};      


MojException::MojException(string ss) throw() : error(ss) {}

MojException::~MojException() throw() {}

const char*MojException::what() const throw() { return error.c_str(); }

/*const string MojException::error[] = { "stopien nie jest naturalny", "liczba wspolczynnikow niezgodna ze stopniem wielomianu", 
    "wspolczynniki nie sa liczbowe", "dane nie sa liczbowe", "4 zla liczba argumentow w linii polecen", "pliki sie nie otwieraja"}; //"nie istnieje taki element tablicy" };
*/

/**
 *  Klasa definiująca wielomian {\link polynomial polynomial}
 *  \version 1.0
 *  \author Joanna Nagumowicz
 *  \date 2013-12-15
 */

template <typename T>
class polynomial
{   public:
    /** Przechowywanie stopnia wielomianu */
    unsigned int degree;                            
    /** Przechowywanie wskaznika na tablice ze wspolczynnikami wielomianu */
    T *coefficients;                            

    /** Funkcja usuwajaca 0 
    *  \param p wielomian
    *  \return wielomian z usunietymi zerami
    */
    const polynomial<T> stopien(polynomial<T> p);


        /** Konstruktor podstawowy klasy polynomial
        *  \param n stopien wielomianu
        *  \return wielomian postaci xn
        *  \throws niepoprawny stopien wielomianu
        *  \throws bad alloc - wyjatek, gdy za malo pamieci
        */
        polynomial<T>(unsigned int n)throw(MojException); 

        /** Destruktor klasy polynomial
        */
        ~polynomial();          

        /** Funkcja ustawiająca współczynniki przy potedze i na value 
        *  \param i indeks ustawianego elementu
        *  \param value wartość ustawianego elementu
        *  \return wartosci wspolczynnikow
        *  \throws MojException wyjątek w przypadku błędnych indeksów
        */
        void setCoefficient(unsigned int i, T value);           

        /** Funkcja zwracajaca wspolczynnik przy potedze i 
        *  \param i indeks zwracanego elementu
        *  \return wartosc zwracanego elementu
        *  \throws MojException wyjatek w przypadku błędnych indeksów
        */
        T getCoefficient(unsigned int i);                       

        /** Funkcja zwracająca wartosc wielomianu dla x 
        *  \param x wartosc dla ktorej liczymy
        *  \return wartosc zwracanej wartosci
        *  \throws MojException wyjątek w przypadku błędnych indeksów
        */
        T value(T x);                           

        /** Funkcja zaprzyjazniona która dla wielomianu wypisuje jego postać
        *  \param p wielomian
        *  \param out strumien zewnetrzny
        *  \return postac wielomianu
        */
        friend ostream & operator<<(ostream & out, polynomial<T> & p); 

        /** Funkcja zaprzyjazniona do obslugi strumieni
        *  \param p wielomian
        *  \param out strumien zewnetrzny
        *  \return postac wielomianu
        */
        friend ostream & operator<<(ostream & out, polynomial<T> * p); 


        /** Przechowywanie komunikatu błędu */
        //static const string error[];          // zdefiniowanie operatora dostepu do tablicy, liczba bledow

        /** Funkcja definiujaca operator dostepu
        *  \param i indeks potegi
        *  \return wartosc wspolczynnika przy potedze i
        *  \throws wyjątek gdy indeks nie należy do tablicy
        */
        T operator[](unsigned int i) throw(out_of_range);       

        /** Funkcja definiujaca operator wywolania
        *  \param x wartosc dla ktorej liczymy wielomian
        *  \return wartosc wielomianu dla danego x
        */
        T operator()(T x) const;    

        /** Konstruktor kopiujacy wspolczynniki do nowej tablicy wspolczynnikow
        *  \param p wielomian
        *  \return wielomian
        */
        polynomial<T> (const polynomial<T> & p);        

        /** Zdefiniowanie przypisania wielomianu operatorem " = "
        * \param p wielomian
        * \return przypisany wielomian
        */
        polynomial<T> & operator=(const polynomial<T> & p); 

        /** zdefiniowanie dodawania wielomianów " + "
        * \param p wielomian
        * \return dodane wielomiany
        */
        const polynomial<T> operator+(const polynomial<T> & p) const;       

        /** zdefiniowanie mnozenia wielomian razy wielomian
        * \param p wielomian
        * \return wymnozone wielomiany
        */
        const polynomial<T> operator*(const polynomial<T> & p) const;       

        /** zdefiniowanie mnozenia liczba razy wielomian
        * \param x liczba przez ktora 
        * \return wymnozony wielomian przez liczbe
        */
        const polynomial<T> operator*(T x) const;               

        /** zdefiniowanie mnozenia wielomian razy liczba
        * \param x liczba przez ktora mnozymy
        * \param p wielomian
        * \return wymnozony wielomian przez liczbe
        */
        friend const polynomial<T> operator*(T x, const polynomial<T> & p); 

        /** zdefiniowanie odejmowanie wielomianow (binarne)
        * \param p wielomian
        * \return roznica wielomianow
        */
        const polynomial<T> operator-(const polynomial<T> & p) const;   

        /** zdefiniowanie odejmowanie wielomianow (unarne)
        * \return wielomian przemnozony przez (-1)
        */
        const polynomial<T> operator-() const;

        /** zdefiniowanie dodania i przypisania wielomianu
        * \param p wielomian
        * \return dodany i przypisany wielomian
        */
        polynomial<T> & operator+=( const polynomial<T> & p); 

        /** zdefiniowanie odejmowania i przypisania wielomianu
        * \param p wielomian
        * \return odjety i przypisany wielomian
        */
        polynomial<T> & operator-=( const polynomial<T> & p);

        /** zdefiniowanie mnożenia i przypisania wielomianu
        * \param p wielomian
        * \return wymnozony i przypisany wielomian
        */
        polynomial<T> & operator*=( const polynomial<T> & p);

        /** zdefiniowanie mnożenia i przypisania wielomianu
        * \param x liczba przez ktora mnozymy wielomian
        * \return wymnozony i przypisany wielomian
        */
        polynomial<T> & operator*=( T x );

        /** zdefiniowanie mnożenia i przypisania wielomianu
        * \param x liczba przez ktora mnozymy wielomian
        * \param p wielomian
        * \return wymnozony i przypisany wielomian
        */
        friend const polynomial<T> operator*=( T x, polynomial<T> & p );

        /** Zdefiniowanie operatora przyrownania wielomianow
        * \param p wielomian
        * \return prawda lub falsz
        */
        bool operator==( const polynomial<T> & p);

        /** Zdefiniowanie operatora nierownosci wielomianow
        * \param p wielomian
        * \return prawda lub falsz
        */
        bool operator!=( const polynomial<T> & p);  

        /** Zdefiniowanie operatora " < " sprawdzajacego czy pierwszy wielomian jest mniejszy
        * \param p wielomian
        * \return prawda lub falsz
        */
        bool operator<( const polynomial<T> & p);

        /** Zdefiniowanie operatora " > " sprawdzajacego czy pierwszy wielomian jest wiekszy
        * \param p wielomian
        * \return prawda lub falsz
        */
        bool operator>( const polynomial<T> & p);

        /** Zdefiniowanie operatora " <= " sprawdzajacego czy pierwszy wielomian jest mniejszy lub rowny drugiemu
        * \param p wielomian
        * \return prawda lub falsz
        */
        bool operator<=( const polynomial<T> & p);

        /** Zdefiniowanie operatora " >= " sprawdzajacego czy pierwszy wielomian jest wiekszy lub rowny drugiemu
        * \param p wielomian
        * \return prawda lub falsz
        */
        bool operator>=( const polynomial<T> & p);
};

//#include "polynomial.cpp"
template <typename T>
polynomial<T>::polynomial(unsigned int n) throw (MojException)
{   
    degree = n;                     // stopień wielomianu
    try
    {
        coefficients = new T[n+1];      // tworzy tablice współczynników wielomianu


    for (int i = 0; i < n+1; i++)       // pętla for która sprawdza współczynniki wielomianu

    {
        coefficients[i]=0;              // zerujemy tablice współczynników
    }
    }
        catch(bad_alloc & w)
    {
        throw MojException("za mało pamięci");
    }
}

template <typename T>
polynomial<T>::~polynomial()                //destruktor zwalniający pamiec
{
    delete []coefficients;
}

template <typename T>
void polynomial<T>::setCoefficient(unsigned int i, T value)   throw(MojException)
{

    coefficients[i]=value;                                          //ustawia wspolczynnik przy potedze i na value
}   

template <typename T>
T polynomial<T>::getCoefficient(unsigned int i) throw(MojException)     // zwraca współczynnik przy potedze i
{
    return coefficients[i];
}

template <typename T>
T polynomial<T>::value(T x) throw(MojException)                         // zwraca wartosc wielomianu dla x
{
    T rezultat = 0;
    for (int i = degree + 1; i >= 0; i--)                               //pętla do obliczenia wyniku (ponieważ na 0 nie wchodzi, dlatego powiększamy stopień o 1)
    {
        rezultat = rezultat * x + coefficients[i];
    }
    return rezultat;
}

template <typename T>
ostream & operator<<(ostream & out, polynomial<T> & p)
{
    for (int i = p.degree ; i >= 0; i--) 
    {
        if (p.coefficients[i]!=0)                       //jeśli współczynnik przy x jest różny od 0
        {

            if (p.coefficients[i]>0 && i!=p.degree )    //jesli potega przy x jest wieksza od 0, to znak +
            {
                out << "+";
            }

            out << p.coefficients[i];                   //wypisuje wspolczynnik
            if (i >= 0)                                 //jesli potega jest >= 0 to wypisuje jak niżej
            out << "*";
            out << "x^" << i;                           //wypisuje x do danej potegi wynikajacej z dzialania petli
        }
    }
    return out;
}

template <typename T>
    T polynomial<T>::operator[](unsigned int i) throw(out_of_range)         // zdefiniowanie operatora dostepu " [] "
    {
        if(i > degree) throw out_of_range( "nie istnieje taki element tablicy " );          // wyjatek jesli dana wartosc nie nalezy do tablicy
        return coefficients[i];                         // dostep do wspolczynnikow wielomianu
    }

template <typename T>
    T polynomial<T>::operator()(T x) const      //zdefiniowanie operatora wywolania " () "
    {
      T v=0.0;
      for(unsigned int i=degree; i>0; i--) v=x*v+coefficients[i];
      v=x*v+coefficients[0];
      return v;                                         //wywolanie wartosci wielomianu w punkcie
    }

template <typename T>
     polynomial<T>::polynomial(const polynomial<T> & p)             // konstruktor kopiujacy
    {
      degree = p.degree;                    
      try{
      coefficients = new T[degree+1];       
      }
      catch(bad_alloc & w)
        {
        throw MojException("za mało pamięci");
        }
      for(unsigned int i=0; i<=degree; i++) 
          coefficients[i] = p.coefficients[i];
    }

template <typename T>    
const polynomial<T> polynomial<T>::stopien(polynomial<T>  p)        //metoda usuwająca 0  
{
    int a;
    for (int i=degree; i<=0; i++)
    {
        if(p.coefficients[i] != 0)
        {
            a=i;
            break;
        }
    }
    polynomial n(a);
    try{
    coefficients = new T[a];
    }
    catch(bad_alloc & w)
    {
        throw MojException("za mało pamięci");
    }
    for (int i=0; i<=a; i++)
    {
        coefficients[i] = p.coefficients[i];
    }
    return n;
}

template <typename T>
     polynomial<T> & polynomial<T>::operator=(const polynomial<T> & p)              // zdefiniowanie przypisania wielomianu operatorem " = "
    {
      delete [] coefficients;
      degree = p.degree;                                                    // bezposrednie przypisanie stopnia
      try{
          coefficients = new T[degree+1];                                   // stworzenie nowej tablicy
      }
      catch(bad_alloc & w)
        {
            throw MojException("za mało pamięci");
        }
      for(unsigned int i=0; i<=degree; i++) 
          coefficients[i] = p.coefficients[i];
      return (*this);                                                       // wynik zwracam jako referencje; this - jest wskaznikiem, odnosi sie do obiektu na rzecz ktorego wywolalismy metode
    }

template <typename T>
     const polynomial<T> polynomial<T>::operator+(const polynomial<T> & p) const        // zdefiniowanie dodawania wielomianów " + "
    {
      unsigned int max, min;
      bool ch = false;
      if( degree>p.degree ) 
      { 
          max=degree; 
          min=p.degree; 
          ch=true;
      }
      else 
      { 
          max=p.degree; 
          min=degree; 
      }
      polynomial c(max);
      for(unsigned int i=0; i<=min; i++ ) 
          c.coefficients[i] = coefficients[i] + p.coefficients[i];
      for(unsigned int i=min+1; i<=max; i++ ) 
        if( ch ) 
            c.coefficients[i] = coefficients[i];
        else 
            c.coefficients[i] = p.coefficients[i];
     polynomial stopien(c);
      return c;
    }

template <typename T>
    const polynomial<T> operator*(T x, const polynomial<T> & p)                         // mnozenie liczba razy wielomian
    {
      polynomial c(p.degree);
      for(unsigned int i=0; i<=p.degree; i++) 
          c.coefficients[i]=x*p.coefficients[i];
      return c;
    }

template <typename T>
    const polynomial<T> polynomial<T>::operator*(T x) const                             // mnozenie wielomian razy liczba
    {
      polynomial c(degree);
      for(unsigned int i=0; i<=degree; i++) 
          c.coefficients[i]=x*coefficients[i];
      return c;
    }

template <typename T>   
    const polynomial<T> polynomial<T>::operator-() const                                        //odejmowanie unarne
    {
        return (-1)*(*this);
    }

template <typename T>
    const polynomial<T> polynomial<T>::operator-(const polynomial<T> & p) const
    {
        return ((*this)+(-p));
    }

template <typename T>
    const polynomial<T> polynomial<T>::operator*(const polynomial<T> & p) const         // mnozenie wielomianow przez siebie
    {
            polynomial c(degree + p.degree);
            for(unsigned int i=0; i<=degree; i++) 
                for(unsigned int j=0; j<=p.degree; j++)
                     c.coefficients[i+j] += coefficients[i] * p.coefficients[j];
            return c;
    }

template <typename T>   
polynomial<T> & polynomial<T>::operator+=( const polynomial<T> & p )    
    {
        *this=*this+p;
        return (*this);
    }

template <typename T>
polynomial<T> & polynomial<T>::operator-=( const polynomial<T> & p )
    {
        *this=*this+(*this+(-p));
        return (*this);
    }

template <typename T>   
polynomial<T> & polynomial<T>::operator*=( const polynomial<T> & p )
    {
        *this=*this*p;
        return (*this);
    }

template <typename T>
polynomial<T> & polynomial<T>::operator*=( T x )
    {
        *this=x*(*this);
        return (*this);
    }

template <typename T>
const polynomial<T> operator*=( T x, polynomial<T> & p )
    {
        p=p*x;
        return p;
    }

template <typename T>
bool polynomial<T>::operator==( const polynomial<T> & p )
    {
      bool ch = false;
      if( degree != p.degree ) 
            return 0;

          else
          { 
              for(unsigned int i=0; i<=degree; i++ )

                 {  
                     ch = false;
                     if (  coefficients[i] == p.coefficients[i] )

                     ch = true;
                 else 
                     return 0;
                 }  
          }
      return ch;
    }

template <typename T>
bool polynomial<T>::operator!=( const polynomial<T> & p )
{
    bool a;
    a = ((*this) == p);
    if(a)       
        return 0;
    return 1;
}       

template <typename T>       
bool polynomial<T>::operator<( const polynomial<T> & p )
{
      bool ch = false;
      if( degree > p.degree ) 
            return 0;
          if( degree < p.degree )
                return 1;

              if ( degree == p.degree )
              {
                  for ( int i=degree; i>=0; i-- )
                  {
                      if ( coefficients[i] < p.coefficients[i] )
                          return true;
                      if ( coefficients[i] > p.coefficients[i] )
                          return false;
                  }
              }
              return 0;   
}

template <typename T>
bool polynomial<T>::operator>( const polynomial<T> & p )
{ 
      if( degree < p.degree ) 
            return 0;
          if( degree > p.degree )
                return 1;

              if ( degree == p.degree )
              {
                  for (  int i=degree; i>=0; i-- )
                  {
                      if ( coefficients[i] > p.coefficients[i] )
                          return 1;
                      if ( coefficients[i] < p.coefficients[i] )
                          return 0;
                  }
              }
              return 0;   
}

template <typename T>
bool polynomial<T>::operator<=( const polynomial<T> & p )
{
    return !((*this) > p);
}

template <typename T>
bool polynomial<T>::operator>=( const polynomial<T> & p )
{
    return !((*this) < p);
}

的main.cpp

#include "polynomial.h"
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;

/** Główna funkcja programu testującego klasę {\link TablicaBool TablicaBool}
 */
int main(int argc, char *argv[]) 
{

try
    {

        //polynomial<int> a(3), b(2);
        //a+=b;


        if (argc != 5) 
            throw MojException( "zla liczba argumentow w linii polecen" );              //sprawdzanie czy ilosc argumentow jest wlasciwa
    }
    catch (MojException e)

    {
    cout << e.what() << endl;
    system ("PAUSE");
    return 1;
    }

        polynomial<int>;
        double stopien;                         // zmienna sluzaca do zapisu stopnia wielomianu z pliku
        double stopien2;
        int k = 0;                              // zmienna do liczby wspolczynnikow
        int x_plik;                             // zmienna sluzaca do zapisu wartosci x z pliku
        int x2_plik;                            // zmienna sluzaca do zapisu wartosci x z pliku
        int x_wartosc;                          // zmienna sluzaca do obliczenia wartosci wielomianu w punkcie
        int wartosc_wspolczynnika1;             // zmienna sluzaca do wylistowania wspolczynnika
        int wartosc_wspolczynnika2;             // zmienna sluzaca do wylistowania wspolczynnika
        int x_mnoznik;                          // zmienna sluzaca do mnozenia wielomianu

        double wspolczynnik;                    // zmienna sluzaca do zapisu wspolczynnika
        double wspolczynnik2;                   // zmienna sluzaca do zapisu wspolczynnika
        string plik(argv[1]);
        ifstream plik_we(plik);                 // plik_we - nazwa strumienia
        string plik0(argv[2]); 
        ifstream plik0_we(plik0);   
        string plik1(argv[3]); 
        ofstream plik1_we(plik1);
        string plik2(argv[4]); 
        ofstream plik2_wy(plik2);

        string linijka;                             //przechowywanie linijek
        string linijka2;                            //przechowywanie linijek


        double stopientmp1;
        //T stopientmp2;
                    try
                        {
                        if (plik_we.good() && plik0_we.good())                  //good jest metoda wywolywana na rzecz obiektu, sprawdza czy plik zostal otwarty pomyslnie
                        { 

                            getline(plik_we,linijka);               // odczytujemy linijka po linijce
                            istringstream tmp(linijka);             // konwersja string na int 

                            getline(plik0_we,linijka2);
                            istringstream tmp2(linijka2);

                            tmp >> stopien;
                            stopientmp1=stopien;
                            tmp2 >> stopien2;
                            stopientmp1=stopien2;

                            if (stopien < 0 || stopien != int(stopien) ) throw MojException("stopien nie jest naturalny");          // jesli stopien mniejszy od 0, zmiennoprzecinkowy lub litera to blad   
                            if (stopien2 < 0 || stopien2 != int(stopien2) ) throw MojException("stopien nie jest naturalny");       // jesli stopien mniejszy od 0, zmiennoprzecinkowy lub litera to blad
                            while (!plik_we.eof())                                          // robi tak dlugo az nie jestesmy na koncu pliku

                            { 
                                getline(plik_we,linijka); 
                                k = k + 1;

                            }
                            if (stopien + 1 != k) throw MojException("liczba wspolczynnikow niezgodna ze stopniem wielomianu");             
                            plik_we.close();
                            k=0;
                            while (!plik0_we.eof())                     //robi tak dlugo az nie jestesmy na koncu pliku
                            { 
                                getline(plik0_we,linijka2); 
                                k = k + 1;
                            }
                            if (stopien2 + 1 != k) throw MojException("liczba wspolczynnikow niezgodna ze stopniem wielomianu");    
                        }

                        plik0_we.close();

                        ifstream plik_we(plik);
                        ifstream plik0_we(plik0);
                        if (plik_we.good() && plik0_we.good() && plik1_we.good() && plik2_wy.good())
                        {

                            getline(plik_we,linijka);   
                            istringstream tmp(linijka);

                            getline(plik0_we,linijka2); 
                            istringstream tmp2(linijka2);

                            tmp >> stopien;
                            tmp2 >> stopien2;

                            polynomial<int> p=polynomial<int>(stopien);
                            polynomial<int> p2=polynomial<int>(stopien2);
                            while (!plik_we.eof())
                            {
                                getline(plik_we,linijka);   
                                istringstream tmp(linijka);
                                tmp >> wspolczynnik;

                                if( tmp.fail()) throw MojException("wspolczynniki nie sa liczbowe");                    
                                p.setCoefficient(stopien,wspolczynnik);     // ustawia współczynnik przy potedze 

                                stopien = stopien - 1;                      // zmniejszanie stopnia wielomianu z kazdym nastepnym wykonaniem petli 
                            }   
                            while (!plik0_we.eof())
                            {
                                getline(plik0_we,linijka2); 
                                istringstream tmp2(linijka2);
                                tmp2 >> wspolczynnik2;

                                if(tmp2.fail() ) throw MojException("wspolczynniki nie sa liczbowe");
                                p2.setCoefficient(stopien2,wspolczynnik2);  // ustawia współczynnik przy potedze 
                                stopien2 = stopien2 - 1;                    // zmniejszanie stopnia wielomianu z kazdym nastepnym wykonaniem petli 
                            }

                cout<<"P(x) = "<<p<<endl;                       // wypisanie wielomianu na ekranie
                cout<<"P2(x) = "<<p2<<endl<<endl;               // wypisanie wielomianu na ekranie



                //sprawdzanie dzialania operatorow

                cout << "Podaj liczbe dla ktorej maja byc obliczone wartosci wielomianow: ";        // wartosc wielomianu w punkcie
                cin >> x_wartosc;
                cout << "P("<<x_wartosc<<") = "<< p(x_wartosc) << endl; 
                cout << "P2("<<x_wartosc<<") = "<< p2(x_wartosc) << endl;   
                cout << endl;

                polynomial<int> pprzy=p2;                               //przypisanie wielomianu    
                cout << "Przypisanie wielomianu P=P2"<<endl;
                cout<<"P(x) = "<<p2<<endl;                                  
                cout << endl;

                polynomial<int> pdod = p+p2;
                cout << "P(x)+P2(x) = " << pdod << endl;

                polynomial<int> pmnoz = 2.0*p;
                cout << "2*P(x) = " << pmnoz << endl;

                polynomial<int> pmnoz2 = p2*2.0;
                cout << "P(x)*2 = " << pmnoz2 << endl;

                polynomial<int> podj = -p;
                cout << "-P(x) = " << podj << endl;

                polynomial<int> podj2 = p2+podj;
                cout << "P2(x)+(-P(x)) = " << podj2 << endl;

                polynomial<int> pwym=p*p2;
                cout << "P(x)*P2(x) = " << pwym << endl; 

                polynomial<int> podjj=p-p2;
                cout << "P(x)-P2(x) = " << podjj << endl;
                cout << endl;

                cout << "Podaj wartosc potegi w wielomianie nr 1 dla ktorego wypisac wspolczynnik: " ;      // wypisanie elementu tablicy (wspolczynnika przy danej potedze)
                cin >> wartosc_wspolczynnika1;
                cout << "Wartosc wspolczynnika to: "<< p[wartosc_wspolczynnika1] << endl;

                cout << "Podaj wartosc potegi w wielomianie nr 2 dla ktorego wypisac wspolczynnik: " ;
                cin >> wartosc_wspolczynnika2;
                cout << "Wartosc wspolczynnika to: "<< p2[wartosc_wspolczynnika2] << endl;  
                cout << endl;

                polynomial<int> pp=(p2+=p);
                cout << "dzialanie += : " << pp << endl;

                polynomial<int> po=(p2-=p);
                cout << "dzialanie -= : " << po << endl;

                polynomial<int> pm=(p2*=p);
                cout << "dzialanie *= : " << pm << endl;

                cout << "dzialanie *= : " << polynomial<int> (p2*=2) << endl;

                cout << "dzialanie *= : " << polynomial<int> (2*=p) << endl;

                cout << "operator == : " << (p==p2) << endl;

                cout << "operator != : " << (p!=p2) << endl;

                cout << "operator < : " << (p<p2) << endl;

                cout << "operator > : " << (p>p2) << endl;

                cout << "operator <= : " << (p<=p2) << endl;

                cout << "operator >= : " << (p>=p2) << endl;

            }
                else throw MojException("blad wczytywania pliku");
}

        catch(out_of_range e)   
            {
                cout<<e.what()<<endl;
            }
        catch(MojException w)   
            {
                cout<<w.what()<<endl;
            }
        catch (...)

    {
    cout << "nieznany blad" << endl;
    plik_we.close();
    plik0_we.close();
    plik1_we.close();
    plik2_wy.close();
    system ("PAUSE");
    return 1;
    }

    plik_we.close();    //zamyka polaczenie z plikiem
    plik0_we.close();
    plik1_we.close();
    plik2_wy.close();



    system ("PAUSE");
    return 0; 
    }

和错误:

1>zad 8 - main.obj : error LNK2019: unresolved external symbol "class polynomial<int> const __cdecl operator*=(int,class polynomial<int> &)" (??X@YA?BV?$polynomial@H@@HAAV0@@Z) referenced in function __catch$_main$0
1>zad 8 - main.obj : error LNK2019: unresolved external symbol "class polynomial<int> const __cdecl operator*(int,class polynomial<int> const &)" (??D@YA?BV?$polynomial@H@@HABV0@@Z) referenced in function __catch$_main$0
1>zad 8 - main.obj : error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class polynomial<int> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$polynomial@H@@@Z) referenced in function __catch$_main$0
1>F:\asik\last\zad08\Debug\zad08.exe : fatal error LNK1120: 3 unresolved externals

但是当我的主要有点瘦时,它正在工作: 主shorter.cpp

#include "polynomial.h"
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;
/** Główna funkcja programu testującego klasę {\link TablicaBool TablicaBool}
 */
int main(int argc, char *argv[]) 
{
try
    {
polynomial<int> a(5), b(2);
a+=b;
}
        catch(out_of_range e)   
            {
                cout<<e.what()<<endl;
            }
        catch(MojException w)   
            {
                cout<<w.what()<<endl;
            }
        catch (...)
    {
    cout << "nieznany blad" << endl;

    system ("PAUSE");
    return 1;
    }
    system ("PAUSE");
    return 0; 
    }

我不知道如何让它发挥作用并使错误消失:(

0 个答案:

没有答案