Ошибка архитектуры 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