Nov 3, 2009 at 12:54am UTC
Hello, I have been trying to compile and run a relatively simple program using Microsoft Visual Studio 2008. However the following error message pops up. What should i do?
error LNK2019: unresolved external symbol "public: void __thiscall Map::setDirection(short (* const)[17])" (?setDirection@Map@@QAEXQAY0BB@F@Z) referenced in function "public: __thiscall Map::Map(void)" (??0Map@@QAE@XZ)
(source code)
---------
class Vertex {
public:
color c; // color
short d; // distance
short n; // number
Vertex *p; // predecessor
private:
};
class Map {
public:
Map();
void setAL(int a, int b, bool w);
void setAL(bool[17][17]);
void setDirection(short[17][17]);
short getDirection(int a, int b);
Vertex vertex[17];
void BFS(Vertex &s);
private:
void initializeJunctions();
bool adjacency_list[17][17];
short directions[17][17];
};
#endif
----------
#include "Map.h"
Map::Map()
{
setAL(adjacency_list);
setDirection(directions);
}
void Map::setAL(int a, int b, bool w)
{
adjacency_list[a][b] = w;
}
void Map::setAL(bool a[17][17])
{
bool b[17][17] = { { false , true , false , false , false , false , true , false , false , false , false , false , false , false , false , false , false },
{ true , false , true , false , false , false , false , false , false , false , false , false , false , false , false , false , false },
{ false , true , false , true , false , false , false , false , false , false , false , false , false , false , false , false , false },
{ false , false , true , false , true , false , false , false , false , false , false , false , false , false , false , false , false },
{ false , false , false , true , false , true , false , true , false , false , false , false , false , false , false , false , false },
{ false , false , false , false , true , false , true , false , false , false , false , false , true , false , false , false , false },
{ true , false , false , false , false , true , false , false , false , false , false , false , false , false , false , false , false },
{ false , false , false , false , true , false , false , false , true , false , false , false , false , true , false , false , false },
{ false , false , false , false , false , false , false , true , false , true , false , false , false , false , false , false , false },
{ false , false , false , false , false , false , false , false , true , false , true , false , false , false , true , false , false },
{ false , false , false , false , false , false , false , false , false , true , false , true , false , false , false , true , false },
{ false , false , false , false , false , false , false , false , false , false , true , false , false , false , false , false , true },
{ false , false , false , false , false , true , false , false , false , false , false , false , false , false , false , false , false },
{ false , false , false , false , false , false , false , true , false , false , false , false , false , false , false , false , false },
{ false , false , false , false , false , false , false , false , false , true , false , false , false , false , false , false , false },
{ false , false , false , false , false , false , false , false , false , false , true , false , false , false , false , false , false },
{ false , false , false , false , false , false , false , false , false , false , false , true , false , false , false , false , false } };
for(int i = 0; i < 17; i++)
{
for(int j = 0; j < 17; j++)
{
a[i][j] = b[i][j];
}
}
}
void setDirection(short a[17][17])
{
short b[17][17] = { { 0 , 4 , 0 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 2 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 2 , 0 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 1 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 4 , 0 , 1 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 3 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 3 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 0 , 1 , 0 , 0 , 0 , 2 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 0 , 1 , 0 , 0 , 0 , 2 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 0 , 0 , 2 },
{ 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 } };
for(int i = 0; i < 17; i++)
{
for(int j = 0; j < 17; j++)
{
a[i][j] = b[i][j];
}
}
}
short Map::getDirection(int a, int b)
{
short dir = directions[a][b];
return dir;
}
void Map::BFS(Vertex &s) // Breadth First Search. G[] is graph, s is position.
{
int num;
queue<Vertex> Q;
Vertex *Ptr;
s.c = GRAY;
s.d = 0;
initializeJunctions();
Q.push(s);
while(!(Q.empty()))
{
Ptr = &Q.front();
Q.pop();
num = Ptr->n;
for(int n = 0; n < 17; n++)
{
if(adjacency_list[n][num] == 1)
{
if(vertex[n].c == 0)
{
vertex[n].c = GRAY;
vertex[n].d = Ptr->d + 1;
vertex[n].p = Ptr;
Q.push(vertex[n]);
}
}
}
Ptr->c = BLACK;
}
}
void Map::initializeJunctions()
{
for(int i = 0; i < 17; i++)
{
vertex[i].c = WHITE;
vertex[i].d = -1;
vertex[i].n = i;
vertex[i].p = &vertex[i];
}
}
----------
#include <iostream>
#include <stack>
#include "Map.h"
using namespace std;
stack< Vertex > path;
void makePath(Vertex &t, Vertex &s);
int main()
{
Map map;
map.BFS(map.vertex[12]);
// makePath(map.vertex[1], map.vertex[12]);
return 0;
}
void makePath(Vertex &t, Vertex &s)
{
Vertex *Ptr;
Ptr = &t;
while(Ptr->n != s.n)
{
path.push(*Ptr);
Ptr = Ptr->p;
}
}