2014-10-26 73 views
0

當我編譯我的程序,我得到: errors錯誤LNK2019無法解析的外部功能

計劃的工作,如果我評論這些部分(功能的車輛::驅動器):

if (check_position(pos, number, 1, 0)) 
    continue; 
change_position(pos, number, 1, 0); 

函數的恆等式change_position & check_position (terrain.cpp):

void change_position(vehicles::position &pos, int number, int vertical, int horizontal){ 
     pos.x[number] = pos.x[number] + vertical; 
     pos.y[number] = pos.y[number] + horizontal; 
} 

bool check_position(vehicles::position &pos, int number, int vertical, int horizontal) 
{ 
    if (pos.x[number] + vertical > MAX_SIZE || pos.x[number] + vertical < 0) 
     return true; 
    if (pos.y[number] + horizontal > MAX_SIZE || pos.y[number] + horizontal < 0) 
     return true; 
    return false; 
} 

函數車:: drive(mechanics.cpp),未完成但在com之後工作換貨上面的代碼:

void vehicles::drive(int move, vehicles::position &pos, int number) 
{ 
    int direction; 
    cout << "Press W,A,S,D to move or Q to quit\n\n"; 

    while (move) 
    { 
     if (move <= 0) 
      break; 
     cin >> direction; 
     switch (direction) 
     { 
     case 'w': 
     case 'W': 
      if (check_position(pos, number, 1, 0)) 
       continue; 
      change_position(pos, number, 1, 0); 
      --move; 
      break; 
     case 'q': 
     case 'Q': 
      break; 
     default: 
      cout << "Press W,A,S,D to move or Q to quit\n\n"; 
      break; 
     } 
    } 

類車輛(vehickles.h):

class vehicles{ 
protected: 
    double durability; 
    double velocity; 
public: 
    vehicles(double d, double v) : durability(d), velocity(v) {} 
    ~vehicles() {} 

    struct position{ 
     vector<int> x; 
     vector<int> y; 
    }pos; 

    void drive(int move, position &pos, int number); 
    void info() { cout << durability << " " << velocity << "\n"; } 
}; 

宣言這些功能:

void change_position(vehicles::position, int, int, int); 
bool check_position(vehicles::position, int, int, int); 
+2

您應該仔細檢查函數聲明的簽名,因爲它們可能與定義不匹配。由於您沒有在您的帖子中包含聲明,因此我們很難判斷問題是否存在,或者是否是其他問題。 – 2014-10-26 14:09:32

+0

@CaptainObvlious我編輯了我的文章。 – Kulis 2014-10-26 14:13:09

回答

1

的問題是你的聲明不匹配的定義。這些聲明按值定義第一個參數,其中的定義是通過引用來引用的。在C++中,這些必須完全匹配,否則當使用函數重載時,鏈接器將不知道使用哪一個。您可以通過更新聲明以下

void change_position(vehicles::position&, int, int, int); 
//         ^
bool check_position(vehicles::position&, int, int, int); 
//         ^

我建議你改變check_position功能通過const參考採取的第一個論點,因爲該函數不修改很容易解決這個問題。

bool check_position(const vehicles::position&, int, int, int); 
相關問題