对ISPRIME(INT)的未定义引用,但已定义

Undefined reference to isPrime(int) but it is defined

本文关键字:引用 定义 未定义 ISPRIME INT      更新时间:2023-10-16

我正在从事一个实用分配,该分配要求我们使用外部功能来确定输入的整数是否是质量数字。我创建了标题文件,外部功能文件和主文件,但是当我使用

编译时

g -o main main.cpp extfunc.cpp

但是我得到了错误:
/TMP/cca073or.o:在功能'main'中:
main.cpp :(。text 0x42(:对" isprime(int('
的未定义引用Collect2:错误:LD返回1退出状态

以下是我的CPP和标题课:
1(Extfunc.h

    bool isPrime(int num);


2(Extfunc.cpp

    # include "extFunc.h"
bool isPrime(int num) {
    int i;
    bool numPrime;
    //Determine if number is prime
    if (num <= 0) {
        numPrime = false;
    }
    if (num =  1) {
        numPrime = false;
    }
    if (num = 2) {
        numPrime = true;
    }
    if (num = 3) {
        numPrime = true;
    }
    else {
        numPrime = true;
        for(i = 2; i < num; i++) {
            if ((num%i) == 0){
                numPrime = false;
                break;
            }
        }
    }
    //Return values
    if (numPrime == true) {
        return true;
    } else {
        return false;
    }
}


3(main.cpp

 #include <iostream>
        #include "extFunc.h"
        using namespace std;
        int main() {
    //Variables
    int uNum;
    bool prime;
    cout << "Enter a number: ";
    cin >> uNum;
    prime = isPrime(uNum);
    if  (prime = true) {
        cout << uNum << " is prime"  << endl;
    } 
    else {
        cout << uNum << " is not prime" << endl;
    }
    return 0;
}


我尝试了我在网站上找到的其他一些建议,包括在标头文件中使用#IFNDEF,但对我来说没有修复任何内容。我无法确定可能是问题的可能是问题,因为标题文件中的函数和功能文件相同,并且在主文件中正确调用(从我所看到的(。

感谢所有响应。我设法解决了这个问题。该大学发布了一份指南,以帮助我们今天早上完成任务,我更改了修复问题的Makefile。

这就是我为我的makefile

main: main.o extFunc.o
    g++ -o main main.o extFunc.o
main.o: main.cpp extFunc.h
    g++ -c main.cpp
extFunc.o: extFunc.h extFunc.cpp
    g++ -c extFunc.cpp
run:
    ./main
clean:
    rm *. main

我认为您在" ="answers" =="之间混淆例如

if (num =  1) {
[...]
}

应该是:

if (num == 1) {
[...]
}

perhapse是为了避免这种错误,使用" const"关键字是一个很好的交易。

发生错误:在Extfunc.cpp的第10、13和16行上和第16行。CPP