2013-12-07 4 views
-1

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

Я использовал г ++ 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 

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

+0

Вы можете показать сделать файл или как же вы собрали? – doptimusprime

ответ

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 
+0

nit: так как это C++, вы должны использовать 'g ++' для ссылки, или некоторые из библиотек C++ не могут быть связаны. –

+0

@SylvainDefresne: Исправлено. – doptimusprime

+0

Итак, какие файлы obj мне нужно связать здесь? – user2636368

Смежные вопросы