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

undefined reference to function in main()

本文关键字:未定义 引用 函数 main      更新时间:2023-10-16

我试图在单独的文件上编写程序。不幸的是,我有错误,而试图建立的代码。它指向构造函数、析构函数和函数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();
};  

/////////////////类的身体/////////////////////////////////////

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] != ''){                  //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;
}

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

您已经声明了全局函数vector<int> CzynnikiPierwsze(int);,但是您还没有在程序的任何地方定义它。

在你的主程序中,你调用全局函数,而不是你的类成员。