2015-09-26 87 views
-3

我有一个程序,用户输入平面的操作。用户可以根据需要选择多种操作(保持,直线,着陆等)。 5.未定义的体系结构x86_64符号链接器错误与C++

我已经申请到抽象工厂设计模式对系统用户可以操作计算所需的燃油量如下:

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生成器生成的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替换时,问题就解决了。

相关问题