3

未解決の外部 (link2019 エラー) を解決しようとしています。この問題については、StackOverflow に多くの投稿がありますが、エラーを理解していないか、認識していません。

エラーは私の generate_maze 関数 (具体的には rand_neighbor() 呼び出しによるものですよね?) が原因ですが、私の理解では、これらはすべて「解決済み」です。

非常に冗長なので、コードを少し切り詰めました。これが適切だったことを願っています。

void generate_maze (Vector<int> &coords, Grid<bool> &included, Maze &m);

int main() {

    Grid<bool> included = initialize_grid();
    Vector <int> coords = rand_coords();
    Vector <int> current_point = coords;

    generate_maze(coords, included, m);
    return 0;
}

void generate_maze (Vector<int> &coords, Grid<bool> &included,  Maze &m) {
    while (gridIsTrue == false) {
    Vector<int> neighbor = rand_neighbor(coords, included);
    pointT neighborpoint = {neighbor[0], neighbor[1]};
    pointT current_point = {coords[0], coords[1]};
    if (included.get(neighbor[0], neighbor[1]) == false) {m.setWall(current_point, neighborpoint, false); included.set(neighbor[0], neighbor[1], true); current_point = neighborpoint;}
    }
}

Vector<int> rand_neighbor(Vector<int> &coords, Grid<bool> &included) {
    while (1) {
        int randomint;
        randomint = randomInteger(1,4);
        if (randomint == 1) {if (included.inBounds(coords[0], coords[1]+1)) {coords[1] = coords[1]+1; break;}}
        if (randomint == 2) {if (included.inBounds(coords[0], coords[1]-1)){coords[1] = coords[1] -1; break;}}
        if (randomint == 3) {if (included.inBounds(coords[0] -1, coords[1])){coords[0] = coords[0] -1; break;}}
        if (randomint == 4) {if (included.inBounds(coords[0] +1, coords[1])){coords[0] = coords[0] + 1; break;}}
                }
        return coords;

エラー:

error LNK2019: unresolved external symbol "class Vector<int> __cdecl rand_neighbor(class Vector<int>,class Grid<bool> &)" (?rand_neighbor@@YA?AV?$Vector@H@@V1@AAV?$Grid@_N@@@Z) referenced in function "void __cdecl generate_maze(class Vector<int> &,class Grid<bool> &,class Maze &)" (?generate_maze@@YAXAAV?$Vector@H@@AAV?$Grid@_N@@AAVMaze@@@Z)
1>C:\Users\com-user\Desktop\New folder\maze\assign3-maze-PC\Maze\Debug\Maze.exe : fatal error LNK1120: 1 unresolved externals
4

2 に答える 2

4

ここで素敵なWebC++デマングラーを使用すると、未定義の参照?rand_neighbor@@YA?AV?$Vector@H@@V1@AAV?$Grid@_N@@@Zが実際にはを意味していることがわかりますclass Vector __cdecl rand_neighbor(class Vector,class Grid &)。エラーメッセージにパラメータがありません。

さて、関数の宣言と定義の違いがわかりますか?

class Vector __cdelc rand_neighbor(class Vector,class Grid &);
Vector<int> rand_neighbor(Vector<int> &coords, Grid<bool> &included) { /* ... */}

それらを少し正規化させてください:

Vector<int> rand_neighbor(Vector<int>, Grid<bool> &);
Vector<int> rand_neighbor(Vector<int> &, Grid<bool> &) { /* ... */}

&関数のプロトタイプで参照()を忘れました!したがって、定義は別の機能になります。

于 2013-03-14T23:10:33.367 に答える
3

リンカが言っているように、問題はrand_neighbor()関数にあります。宣言を提供しましたが (そうしないと、リンカー エラーではなくコンパイラ エラーが発生します)、定義が提供されていません。

于 2013-03-14T22:47:39.377 に答える