簡體   English   中英

錯誤LNK2019未解決的外部功能

[英]error LNK2019 unresolved external function

當我編譯程序時,我得到: 錯誤

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

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;
}

功能車輛::驅動器(mechanics.cpp),未完成,但在上面的代碼注釋后可以工作:

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);

問題是您的聲明與定義不匹配。 聲明按值采用第一個參數,而定義按引用采用。 在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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM