C ++未定义引用'Prime_functions :: isprime()'

时间:2015-08-13 09:18:29

标签: c++ codeblocks

我现在已经弄清楚出了什么问题。这是一个问题,因为代码块根本无法正常工作(或者某些设置我在没有意识到的情况下进行了更改)。使用默认设置启动新项目,复制/粘贴让我完成了它。如果有人想要阅读它,原始问题仍然写在下面。

我在构建使用Codeblocks 13.12创建的C ++项目时遇到了一些麻烦。当我尝试构建它时,我收到了错误消息

  

对'Prime_functions :: isprime()'

的未定义引用

我已经看过这个问题(或者之前提到过的非常相似的问题),但我看到的解决方案要么比我们帮助的要困难,要么就是直接做了什么。

以下是此项目中的文件:

的main.cpp

#include "Prime_functions.h"
#include <iostream>
#include <string>
#include <cmath>
#include <math.h>

int main()
{
    Prime_functions bo;
    bo.isprime();
    std::cout << bo.factor;

    return 0;
}

Prime_functions.h

#ifndef PRIME_FUNCTIONS_H
#define PRIME_FUNCTIONS_H


class Prime_functions
{
    public:
        int isprime();
        int primedetector();
        int primelist();
        int max_and_min_prime();
        int factor;
    protected:
    private:
};

#endif // PRIME_FUNCTIONS_H

Prime_functions.cpp

#include "Prime_functions.h"
#include <iostream>
#include <string>
#include <cmath>
#include <math.h>


int factor = 0;

int primedetector(int a){
    int n = 2;
    while(2*n <= a+1){
        if(a%n == 0){
            factor = n;
            return a;
            n = a+1;
        }
        if (a-1 < 2*n){
            return 0;
        }
        n++;
    }
}

int isprime(){
    std::cout << "Enter a number and check if it's prime." << std::endl;
    int a;
    std::cin >> a;
    std::cout << std::endl;
    if(primedetector(a) == a){
        std::cout << a << " is not a prime number. It is divisible by " << factor << std::endl;
    }else if(primedetector(a) == 0){
        std::cout << a << " is a prime number. " << std::endl;
    }
    std::cout << std::endl;
}

int primelist(){
    int p,q;
    std::cout << "Enter the lower limit for this search" << std::endl;
    std::cin >> p;
    std::cout << "Enter the upper limit for this search" << std::endl;
    std::cin >> q;
    std::cout << "----------" << std::endl;
    if(p>q){
        int q2 = q;
        int p2 = p;
        q = p2;
        p = q2;
    }
    if(p<2){
        p=2;
    }
    for(int z=p; z<q; z++){
        if(primedetector(z)==0){
            std::cout << z << std::endl;
        }
    }
}

int max_and_min_prime(){
    int p,q;
    std::cout << "Enter the lower limit for this search" << std::endl;
    std::cin >> p;
    std::cout << "Enter the upper limit for this search" << std::endl;
    std::cin >> q;
    std::cout << "----------" << std::endl;
    if(p>q){
        int q2 = q;
        int p2 = p;
        q = p2;
        p = q2;
    }
    if(p<2){
        p=2;
    }
    int current = 0;
    for(int z=p; z<q; z++){
        if(primedetector(z)==0){
            if(current == 0){
                current = z;
                std::cout << "The prime smallest number in this range is " << current;
            }
            current = z;
        }
    }
    std::cout << " and the largest is " << current << ".\n\n";
}

有些事情可能会或可能不会很重要:

  • 如果我从bo.isprime();删除行main.cpp,它将进行编译,因此错误可能与此相关。用其他功能替换它似乎会导致同样的问题。
  • std::cout << bo.factor;放在那里检查事情是否正常运行。但是,它打印出1972859722而不是指定的值; 0
  • Prime_functions.cpp文件中的函数作为独立文件正常工作(我之后删除了int main()函数,但没有做任何其他更改。)
  • int functions中的Prime_finctions.cpp添加返回值不会做任何事情。使它们无效也无济于事。

这几乎是我现在能想到的所有相关信息。

0 个答案:

没有答案