2015-09-26 3 views
-3

У меня есть программа, в которой пользователь вводит операции плоскости. Пользователь может выбрать как можно больше операций (удерживание, прямое, посадочное и т. Д.). Пользователь может рассчитать необходимое потребление топлива с работой 5.Неопределенные символы для архитектуры x86_64 Ошибка компоновщика с C++

Я подал заявку на шаблон Abstract Factory Design в систему следующим образом:

FlightModeInterface.h

class FlightModeInterface{ 

protected: 
float time, fuel_rate, start, end, pace, distance; 
float total; 

public: 
    enum FLIGHT_MODES{ 
     HOLDING, 
     RAISING, 
     LANDING, 
     STRAIGHT 
    }; 

    FlightModeInterface(); 

    virtual ~FlightModeInterface(){ } 

    virtual float calcFuel(float, float, float, 
       float, float, float) = 0; 

    static FlightModeInterface* createFactory(FLIGHT_MODES); 
}; 

FlightModeFactory.cpp

#include "FlightModeInterface.h" 
#include "Holding.h" 
#include "Landing.h" 
#include "Raising.h" 
#include "Straight.h" 

class FlightModeFactory{ 
protected: 
    float time, fuel_rate, start, end, pace, distance; 
    float total; 
public: 
    static FlightModeInterface* createFactory(FlightModeInterface::FLIGHT_MODES mode){ 
     switch (mode) { 
      case FlightModeInterface::HOLDING: 
       return new Holding(); 
      case FlightModeInterface::LANDING: 
       return new Landing(); 
      case FlightModeInterface::RAISING: 
       return new Raising(); 
      case FlightModeInterface::STRAIGHT: 
       return new Straight(); 
     } 
     throw "invalid flight mode."; 

    } 
}; 

CalculateFuel.cpp

#include <iostream> 
#include <stdio.h> 
#include "FlightModeInterface.h" 

using namespace std; 


int main(){ 
    char op = 's'; 
    float time=0, fuel_rate=0, start=0, end=0, pace=0, distance=0; 
    float total = 0; 
    FlightModeInterface *factory; 

    while(op != 'x') { 

     float hold_result, raise_result, land_result, str_result; 

     cout << "Please select an operation: " << endl; 
     cout << "1 ---> Holding flight" << endl; 
     cout << "2 ---> Raising" << endl; 
     cout << "3 ---> Landing " << endl; 
     cout << "4 ---> Straight " << endl; 
     cout << "5 ---> Calculate total fuel consumption" << endl; 
     cout << "x ---> Exit " << endl; 

     cin >> op; 

     switch(op){ 
     case '1': 
      cout << "Holding time (minutes): "; 
      cin >> time; 
      cout << "Fuel rate (kg/sec): "; 
      cin >> fuel_rate; 

      factory = FlightModeInterface::createFactory(FlightModeInterface::HOLDING); 

      hold_result = factory -> calcFuel(time, fuel_rate, 0, 0, 0, 0); 

      total += hold_result; 
      break; 
     case '5': 
      cout <<"Total fuel requirement: "<< total << " kg"<< endl; 
      total = 0; 
      break; 
     case 'x': 
      return 0; 
     default: 
      continue; 
     } 
    } 
    return 0; 

} 

Когда я бегу CalculateFuel.cpp, я встречаю эту ошибку (я использую Eclipse, Builder для построения кода на MAC):

23:46:08 **** Build of configuration Debug for project CalculateFuel **** 
make all 
Building file: ../src/CalculateFuel.cpp 
Invoking: GCC C++ Compiler 
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/CalculateFuel.d" -MT"src/CalculateFuel.d" -o "src/CalculateFuel.o" "../src/CalculateFuel.cpp" 
Finished building: ../src/CalculateFuel.cpp 

Building file: ../src/FlightModeFactory.cpp 
Invoking: GCC C++ Compiler 
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/FlightModeFactory.d" -MT"src/FlightModeFactory.d" -o "src/FlightModeFactory.o" "../src/FlightModeFactory.cpp" 
Finished building: ../src/FlightModeFactory.cpp 

Building target: CalculateFuel 
Invoking: MacOS X C++ Linker 
g++ -o "CalculateFuel" ./src/CalculateFuel.o ./src/FlightModeFactory.o 
Undefined symbols for architecture x86_64: 
    "FlightModeInterface::createFactory(FlightModeInterface::FLIGHT_MODES)", referenced from: 
     _main in CalculateFuel.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [CalculateFuel] Error 1 

Любые идеи о том, как решить это?

+0

Улучшите свой первоначальный вопрос, пожалуйста, или обеспечьте щедрость, но не спрашивайте его снова! –

+1

@ πάνταῥεῖ Но это другой вопрос? – supaplex

+0

Это другой вопрос, но он все еще работает над тем же предметом, который у вас есть. Мы не ваша личная справочная служба здесь, чтобы помочь вам решить ваши проблемы, извините. –

ответ

0

Проблема решена, когда FlightModeFactory.cpp заменен FlightModeFactory.h.

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