簡體   English   中英

僅在g ++編譯器中對函數錯誤的C ++未定義引用

[英]C++ undefined reference to function error in g++ compiler only

我已經看過其他一些這樣的問題,但是似乎應該正確設置所有功能。 在CodeLite中運行時,所有內容均可正確編譯,但隨后在使用g ++的Linux服務器上進行編譯時,我在'main.cpp'中得到對函數add_fraction,subtract_fraction,multiple_fraction,divide_fraction錯誤的未定義引用。如何解決此問題? 謝謝!

main.cpp中

#include <iostream>
#include <string>
#include "header.h"


using std::cout;
using std::cin;
using std::endl;

int main()
{

int numerator;
int denominator;
int numerator2;
int denominator2;
char operation;

cout << "Input the numerator: ";
cin >> numerator;

cout << "Input the denominator: ";
cin >> denominator;

cout << "Input the numerator2: ";
cin >> numerator2;

cout << "Input the denominator: ";
cin >> denominator2;

cout << "Input the operation: ";
cin >> operation;

if (operation != '+' || '-' || '*' || '/'){
    cout << "Please input a valid operator: ";
    cin >> operation;
}
if (operation == '+'){
    Rational addFrac;
    addFrac.add_fraction(numerator, numerator2, denominator, denominator2);
}
if (operation == '-'){
    Rational subFrac;
    subFrac.subtract_fraction(numerator, numerator2, denominator, denominator2);
}
if (operation == '*'){
    Rational multFrac;
    multFrac.multiply_fraction(numerator, numerator2, denominator, denominator2);   
}
if (operation == '/'){
    Rational divideFrac;
    divideFrac.divide_fraction(numerator, numerator2, denominator, denominator2);   
}


return 0;   
}

header.h

#ifndef HEADER_H
#define HEADER_H

class Rational{

public:
void reduce_fraction(int &top, int &bottom);
void add_fraction(int numerator, int denominator, int numerator2, int denominator2);
void subtract_fraction(int numerator, int denominator, int numerator2, int denominator2);
void multiply_fraction(int numerator, int denominator, int numerator2, int denominator2);
void divide_fraction(int numerator, int denominator, int numerator2, int denominator2);
};

#endif // HEADER_H

header.cpp

#include "header.h"
#include <iostream>
#include <string>

using std::cout;
using std::cin;
using std::endl;

void Rational::reduce_fraction (int & top, int & bottom)
{
    for (int i = top * bottom; i > 1; i--) {  
            if ((top % i == 0) && (bottom % i == 0)) {  
         bottom /= i;  
            top /= i;  
            }  

     }
 }

void Rational::add_fraction (int numerator, int numerator2, int denominator, int denominator2)
 {  
int top;
int bottom;

top = numerator2 * denominator + denominator2 * numerator;
bottom = denominator2 * denominator;

cout << "Improper Fraction -> ";
cout << top << "/" << bottom << endl;
cout << "Simplified (Rational) Fraction -> ";
if (top == bottom){
    cout << "1" << endl;
}
else {
Rational redu;
redu.reduce_fraction(top, bottom);
cout << top << "/" << bottom << endl;

}
}

void Rational::subtract_fraction (int numerator, int numerator2, int denominator, int denominator2)
{
int top;
int bottom;

top = denominator2 * numerator - denominator * numerator2;
bottom = denominator2 * denominator;

cout << "Improper Fraction -> ";
cout << top << "/" << bottom << endl;
cout << "Simplified (Rational) Fraction -> ";
if (top == bottom){
    cout << "1" << endl;
}
else {
Rational redu;
redu.reduce_fraction(top, bottom);
cout << top << "/" << bottom << endl;

}
}

void Rational::multiply_fraction (int numerator, int numerator2, int denominator, int denominator2)
{
int top;
int bottom;

top = numerator * numerator2;
bottom = denominator * denominator2;

cout << "Improper Fraction -> ";
cout << top << "/" << bottom << endl;
cout << "Simplified (Rational) Fraction -> ";
if (top == bottom){
    cout << "1" << endl;
}
else {
Rational redu;
redu.reduce_fraction(top, bottom);
cout << top << "/" << bottom << endl;

}
}

void Rational::divide_fraction (int numerator, int numerator2, int denominator, int denominator2)
{
int top;
int bottom;

top = denominator2 * numerator;
bottom = numerator2 * denominator;

cout << "Improper Fraction -> ";
cout << top << "/" << bottom << endl;
cout << "Simplified (Rational) Fraction -> ";
if (top == bottom){
    cout << "1" << endl;
}
else {
Rational redu;
redu.reduce_fraction(top, bottom);
cout << top << "/" << bottom << endl;

}   
}

Makefile文件

CXX = g++
CXXFLAGS = -g

default: main

search: main.cpp
${CXX} ${CXXFLAGS} main.cpp -o search
clean: 
rm -f *.o main 

您根本沒有構建header.cpp 您的Makefile中未提及。 您需要對其進行編譯並將其鏈接到您的可執行文件中。 嘗試這個:

search: main.cpp header.cpp
    ${CXX} ${CXXFLAGS} main.cpp header.cpp -o search

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM