Hello. I'm a C++ newbie and am trying to make a functional console RPG game as a hobby project. The code I'm having a problem with allows the players to move through rooms, similar to an old text adventure game. I realize it's probably inefficient, but I've only been learning for a couple of weeks now.

I'm using Visual C++ 2008 Express. The code is below:

// Moving Through a Map
// Adventure-game style!

#include <iostream>
#include <string>
#include <vector>
using namespace std;

// Room class - defines a object representing rooms the player moves through
class Room {
private:
	short int northConnectionID;
	short int southConnectionID;
	short int eastConnectionID;
	short int westConnectionID;
	string description;
	int roomID;

public:
	Room(int roomID, int n, int s, int e, int w, string desc);
	int GetNorthConnection();
	int GetSouthConnection();
	int GetEastConnection();
	int GetWestConnection();
	string GetDescription();
	int GetRoomID();
};

Room::Room(int roomID, int n, int s, int e, int w, string desc) {
	northConnectionID = n;
	southConnectionID = s;
	eastConnectionID = e;
	westConnectionID = w;
	description = desc;
}

int Room::GetNorthConnection() {
	return northConnectionID;
}

int Room::GetSouthConnection() {
	return southConnectionID;
}

int Room::GetEastConnection() {
	return eastConnectionID;
}

int Room::GetWestConnection() {
	return westConnectionID;
}


string Room::GetDescription() {
	return description;
}
// Player class - simple class defining the player
class Player {
private:
	int location;
public:
	Player(int startingLocation);
	int GetLocationID();
};

Player::Player(int startingLocation) {
	location = startingLocation;
}

int Player::GetLocationID() {
	return location;
}


// global functions
int Move(int roomID, vector<Room> map, Player& p, char direction);
vector<Room> ConstructMap();
// Main function
int main() {
	vector<Room> map = ConstructMap();
	Player player(1);
	char choice;
	string desc;
	do {
		
		cout << "Move in what direction? (n/s/e/w): ";
		cin >> choice;
		Move(player.GetLocationID(), map, player, choice);
	} while (choice == ('n' || 's' || 'w' || 'e'));

	return 0;
}
int Move(int roomID, vector<Room> map, Player& p, char direction) {
	int pNorthConnection, pSouthConnection, pEastConnection, pWestConnection;
	string nDesc, sDesc, eDesc, wDesc;
	// Determines the player's location
	for (int i = 0; i < map.size(); ++i) {
		if (map[i].GetRoomID() == p.GetLocationID())
			Room pLoc = map[i];
	}

	// Determines the player's location's connections, if any
	for (int i = 0; i < map.size(); ++i) {
		if (map[i].GetNorthConnection() != 0) {
			pNorthConnection = map[i].GetNorthConnection();
			nDesc = map[i].GetDescription();
		}

		if (map[i].GetSouthConnection() != 0) {
			pSouthConnection = map[i].GetSouthConnection();
			sDesc = map[i].GetDescription();
		}

		if (map[i].GetEastConnection() != 0) {
			pEastConnection = map[i].GetEastConnection();
			eDesc = map[i].GetDescription();
		}

		if (map[i].GetWestConnection() != 0) {
			pWestConnection = map[i].GetWestConnection();
			wDesc = map[i].GetDescription();
		}
	}

	// Constructs the final description, moves the player, if possible, 
    // else lets the player know the move is impossible.
	if (direction == 'n' && (pNorthConnection != 0)) {
		cout << nDesc;
		return pNorthConnection;
	}
	else if (direction == 's' && (pSouthConnection != 0)) {
		cout << sDesc;
		return pSouthConnection;
	}
	else if (direction == 'e' && (pEastConnection != 0)) {
		cout << eDesc;
		return pEastConnection;
	}
	else if (direction == 'w' && (pWestConnection != 0)) {
		cout << wDesc;
		return pWestConnection;
	}
	// Returns 0 if the move is impossible.
	return 0;
}

Vector<Room> ConstructMap() {
	vector<Room> map;
	// Hard-coded map for the test environment.
	Room r1(1, 0, 2, 0, 0, "A damp corrider. There is a doorway to the south.");
	Room r2(2, 1, 0, 0, 0, "A grand hall.  There is a doorway to the north.");

	map.push_back(r1);
	map.push_back(r2);

	return map;
}

The compiler outputs the following errors:
1>c:\...\main.cpp(147) : error C2143: syntax error : missing ';' before '<'
1>c:\...\main.cpp(147) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\...\main.cpp(147) : error C2143: syntax error : missing ';' before '{'
1>c:\...\main.cpp(147) : error C2447: '{' : missing function header (old-style formal list?)

I've spend a couple hours looking for the missing ';' and simply can't find it. Am I missing where it should be, or is this explained by something else?

Any assistance is appreciated! Thanks! :)

What a silly mistake on my part. With the following correction vector<Room> ConstructMap() { , the compiler now outputs a more cryptic error message:

1>main.obj : error LNK2019: unresolved external symbol "public: int __thiscall Room::GetRoomID(void)" (?GetRoomID@Room@@QAEHXZ) referenced in function "int __cdecl Move(int,class std::vector<class Room,class std::allocator<class Room> >,class Player &,char)" (?Move@@YAHHV?$vector@VRoom@@V?$allocator@VRoom@@@std@@@std@@AAVPlayer@@D@Z)

I know that means I'm not giving the linker information it needs, but I'm not quite sure where to start to fix it.

This article has been dead for over six months. Start a new discussion instead.