对main()中函数的未定义引用

时间:2014-03-22 13:54:21

标签: c++ linker undefined-reference

我试图在单独的文件上制作程序。不幸的是,我在尝试构建代码时遇到了错误。它指向未定义的对constuctors,destructos和函数CzynnikiPierwsze的引用。所以我决定将整个代码放在一个代码中。 main()函数仍有问题:未定义引用' CzynnikiPierwsze(int)'任何想法都错了吗?这是完整的代码:

#include <iostream>
#include <cctype>
#include <vector>


using namespace std;
vector<int> CzynnikiPierwsze(int);


class NieprawidlowaDana                           //wyjatki
    {};
class SpozaZakresu
    {};



class RozkladLiczby{
    private:
        int *tab;
    public:
        RozkladLiczby(int);                  //konstruktor
        vector<int> CzynnikiPierwsze(int); //metoda
        ~RozkladLiczby();
};  

///////////////// CLASS的身体////////////////////////// ///////////

RozkladLiczby::~RozkladLiczby()         //destruktor
{}

RozkladLiczby::RozkladLiczby(int n){
    int* tab = new int[n+1];
    int i,j;

    for( i=0;i<=n;i++)
        tab[i]=0;                  //zerujemy tablice

    for( i=2;i<=n;i+=2)
        tab[i]=2;                  //zajmujemy sie liczbami parzystymi

    for(i=3; i<=n;i+=2)
        for(j=i;j<=n;j+=i)         //sito erastotesa
            if(tab[j]==0)
                tab[j]=i;


}

   vector<int> RozkladLiczby::CzynnikiPierwsze(int m){
        vector<int> tablica;
        while(m!=1){
            tablica.push_back(tab[m]);
            m=m/tab[m];
        }

return tablica;

}


////////////////////////END OF THE BODY//////////////////////////////




int parsuj(char* argz){
    int i=0;
        while(argz[i] != '\0'){                  //funckja ktora konwertuje na int i sprawdza czy wprowadzaony zostal string
            if( !isdigit(argz[i]))
                throw NieprawidlowaDana();
                i=i+1;
            }
        int x = stoi(argz);
        if (x >= 2)
            return x;
        else
            throw SpozaZakresu();

}






//////////////////GLOWNY BLOK///////////////////////////////////////

int main(int argc,char* argv[]){


    vector<int> tablica,p;
    int i,n;
    int max;

     for( i=1;i<=argc-1;i++){
        n = parsuj(argv[i]);
        tablica.push_back(n);
    }

     max=tablica[0];

     for(i=1; i<=argc-1;i++){
        if(tablica[i]>max)
            max=tablica[i]; }  // sprawdzamy max 

    RozkladLiczby odp = RozkladLiczby(max);  //utwoorzylismy obiekt z maxa


     for(unsigned int i=0;i<=tablica.size()-1;i++){
        p=CzynnikiPierwsze(tablica[i]);
        cout<<tablica[i]<<" = ";
        int x= p[0];

        int licznik = 1;
        for(unsigned int j=1;j<=p.size()-1;j++){
            if(x==p[j])
                licznik++;
            else if(licznik!=1)
                cout<<x<<"^"<<licznik<<"*";
            else
                cout<<x<<"*";
        } 
            cout<<endl;

        }

return 0;

}

如果你能解决这个问题,我将不胜感激。

1 个答案:

答案 0 :(得分:7)

您已声明全局函数vector<int> CzynnikiPierwsze(int);,但尚未在程序中的任何位置定义它。在你的主要部分,你正在调用全局函数,而不是你的类成员。