未定义的isPrime(int)引用,但已定义

时间:2018-03-23 23:33:53

标签: c++ function reference undefined external

我正在进行一项实际任务,要求我们使用外部函数来确定输入的整数是否为素数。我已经创建了头文件,外部函数文件和主文件,但是当我使用

进行编译时
  

g ++ -o main main.cpp \ n extFunc.cpp

但我收到错误:
/tmp/cca073oR.o:在功能' main':
main.cpp :(。text + 0x42):未定义引用' isPrime(int)'
collect2:错误:ld返回1退出状态

以下是我的cpp和header类:
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,但它没有为我修复任何内容。我无法确定可能出现的问题,因为头文件和函数文件中的函数是相同的,并且在主文件中正确调用(从我可以看到)。

2 个答案:

答案 0 :(得分:0)

感谢所有回复。我设法解决了这个问题。大学今天早上发布了一份帮助我们完成作业的指南,并且我修改了修复问题的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

答案 1 :(得分:0)

我认为您在“ =”和“ ==”之间混淆 例如

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

应该是:

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

也许为了避免这种错误,最好使用“ const”关键字。

发生错误: 在extFunc.cpp的第10、13和16行上 和main.cpp中的第16行