Ошибка архитектуры x86_64 в C++

Когда я пытаюсь запустить этот код C++ с g ++ на Mac, я получаю следующую ошибку. Может кто-нибудь сказать мне, что это значит. Я новичок в программировании. Так что любая помощь будет принята с благодарностью. Я пытаюсь использовать абстрактные классы (Expr.cpp) и подкласс (Binary.cpp), чтобы сделать это.

Я использовал g ++ main.cpp для компиляции

ошибка -

Undefined symbols for architecture x86_64:
"Expr::Expr()", referenced from:
  stepexecution(double, double, double)in cc8Vni4M.o
 "Expr::setArg(double)", referenced from:
  stepexecution(double, double, double)in cc8Vni4M.o
"Expr::setRece(double)", referenced from:
  stepexecution(double, double, double)in cc8Vni4M.o
"Binary::sum()", referenced from:
  stepexecution(double, double, double)in cc8Vni4M.o
"Expr::Expr()", referenced from:
  Binary::Binary()in cc8Vni4M.o
 ld: symbol(s) not found for architecture x86_64
 collect2: ld returned 1 exit status

код

main.cpp -

 #include <iostream>
#include <fstream>
#include <string>

using namespace std;

void stepexecution(double x, double y, double z)
{
string STRING;
Expr ex;
Binary bi;
ifstream infile;
char ele1;
char ele2;
char rece;
double d = 7;
infile.open ("program.txt");
while(!infile.eof()) // To get you all the lines.
{
    getline(infile,STRING);
    int length = STRING.length();

        if(length>8)
        {
            rece = STRING.at(0);
            ele1 = STRING.at(4);
            ele2 = STRING.at(8);
            cout << ele1 << ele2;
            if(ele1=='x' && ele2=='y')
            {
                ex.setArg(x);
                ex.setRece(y);
                double a = bi.sum();
                cout << a;
            }

        }


}
infile.close();
}

int main()
{
char c;
int t = 0;
double x = 10;
double y = 0;
double z = 0;
while(t==0)
{
    cout << "Please enter a command:";
    cin >> c;
    if(c=='r')
    {
        x=0;
        y=0;
        z=0;
    }
    if(c=='x')
    {
        cout << "Please enter the value of x:";
        cin >> x;
    }
    if(c=='y')
    {
        cout << "Please enter the value of x:";
        cin >> y;
    }
    if(c=='z')
    {
        cout << "Please enter the value of x:";
        cin >> z;
    }
    if(c=='s')
    {
        stepexecution(x,y,z);
    }
    if(c=='q')
    {
        exit(0);
    }
}

}

Expr.cpp -

#include "Expr.h"

void Expr::setRece(double x)
{
rece = x;
}
void Expr::setArg(double y)
{
arg = y;
}
//Constructor.
Expr::Expr()
{

}

Expr.h -

#ifndef ____Expr__
#define ____Expr__

#include <iostream>
#include "math.h"

using namespace std;

 class Expr {
public:
void setRece(double x);
void setArg(double y);
Expr();
protected:
double arg, rece;
};

#endif /* defined(____Expr__) */

Binary.cpp -

#include "Binary.h"

double Binary::sum()
{
return rece+arg;
}

double Binary::subt()
{
return rece-arg;
}

double Binary::mult()
{
return rece*arg;
}

double Binary::divi()
{
return rece/arg;
}

double Binary::exp()
{
return pow(rece,arg);
}

Binary.h -

#ifndef ____Binary__
#define ____Binary__
#include "Expr.h"
#include <iostream>

using namespace std;

 class Binary : public Expr
 {
public:
double sum();
double subt();
double mult();
double divi();
double exp();

};
#endif

Спасибо за любую помощь:)

1 ответ

Эта ошибка означает, что вы не правильно связали свои объектные файлы. Все объектные файлы должны быть связаны с конечной программой.

Если они связаны, то есть некоторые функции, которых нет ни в одном объектном файле. Пожалуйста, ссылку правильные файлы.

скомпилировать файл только для использования файла obj

  g++ -o binary.o -c binary.cpp
  g++ -o expr.o -c expr.cpp

Наконец, чтобы связать с использованием основного файла,

 g++ -o main main.cpp expr.o binary.o
Другие вопросы по тегам