c++ - 对 main() 中函数的 undefined reference

标签 c++ linker undefined-reference

我试图在单独的文件上制作一个程序。不幸的是,我在尝试构建代码时遇到了错误。它指向对构造函数、析构函数和函数 CzynnikiPierwsze 的 undefined reference 。所以我决定将整个代码放在一个代码中。 main() 函数中仍然存在问题:对“CzynnikiPierwsze(int)”的 undefined reference 有什么想法吗?这是完整的代码:

#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] != '\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;

}

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

最佳答案

您已声明全局函数 vector<int> CzynnikiPierwsze(int);但是您没有在程序的任何地方定义它。在您的主体中,您调用的是全局函数,而不是您的类(class)成员。

关于c++ - 对 main() 中函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578478/

相关文章:

c++ - 我收到 "undefined reference"错误,我不明白为什么 (C++ OO)

C++ vector 和 push_back

c++ - 现代编译器中的 const 与 #define

c - 链接器如何决定要包含库的哪些部分?

C++ DLL 链接器错误

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - Boost.Graph 库:如何使用 boost::is_isomorphism 命名顶点

c++ - 编译器不将 vector 识别为类成员

c++ - 如何更改 Eigen 的版本

c++ - undefined reference