I was working on some code for a class and checked everything, including a lot of similar errors, but nothing seem to be the same, could someone have a look?
I think it might have to do with c++ versions not being compatible with some code here but I'm not sure which.
I get the following error:
Undefined symbols for architecture x86_64:
"__ZN15RobotController14initializeGameEi", referenced from:
_main in ccZ9ege2.o
"__ZN15RobotController8playGameEv", referenced from:
_main in ccZ9ege2.o
"__ZN15RobotControllerC1Ev", referenced from:
_main in ccZ9ege2.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
main.cpp
#include <iostream>
#include "RobotController.h"
#include "Robot.h"
using namespace std;
int main()
{
string inputBuffer;
int numberOfPlayers;
RobotController gameManager;
/// get the number of players
do
{
cout << "How many players:";
getline(cin, inputBuffer);
numberOfPlayers = atoi( inputBuffer.c_str() );
}
while (numberOfPlayers < 1 || numberOfPlayers > 9);
/// play the game over and over
do
{
gameManager.initializeGame(numberOfPlayers);
gameManager.playGame();
cout << endl << "Play Again? [y/n]";
getline(cin, inputBuffer);
}
while ( tolower(inputBuffer[0]) != 'n' );
return 0;
}
Robot.h
#ifndef ROBOT_H
#define ROBOT_H
#include <sstream>
using namespace std;
class Robot {
public:
Robot();
void setName(string name);
string getName();
void print();
bool addWheel();
bool addAxle();
bool addTorso();
bool addPlunger();
bool addHead();
bool addAntenna();
bool addCell();
int countWheel();
int countAxle();
int countHead();
int countTorso();
int countPlunger();
int countAntenna();
int countCell();
bool complete();
void initialize();
private:
string playerName_;
int wheels_, axles_, torsos_, plungers_, heads_, antennae_, cells_;
};
#endif
Robot.cpp
#include "Robot.h"
#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
void Robot::initialize(){
wheels_=axles_=torsos_=plungers_=heads_=antennae_=cells_=0;
}
void Robot::print() {
cout << endl;
cout << playerName_ << "\'s Robot Parts: ";
cout << "Wheels: " << wheels_ << "| Axles: " << axles_
<< "| Torso: " << torsos_ << "| Plungers: " << plungers_
<< "| Heads: " << heads_ << "| Antenna: " << antennae_
<< "| Power Cells: " << cells_ << endl;
cout << endl;
}
void Robot::setName(string name) { playerName_ = name; }
string Robot::getName() { return playerName_; }
bool Robot::addWheel() {
if (wheels_ < 3) {
wheels_++;
return true;
}
return false;
}
bool Robot::addAxle() {
if ((axles_ < 3) && (wheels_ > axles_)) {
axles_++;
return true;
}
return false;
}
bool Robot::addTorso() {
if ((torsos_ == 0) && (axles_ == 3)) {
torsos_++;
return true;
}
return false;
}
bool Robot::addPlunger() {
if ((plungers_ == 0) && torsos_ == 1) {
plungers_++;
return true;
}
return false;
}
bool Robot::addHead() {
if ((heads_ == 0) && (torsos_ == 1)) {
heads_++;
return true;
}
return false;
}
bool Robot::addAntenna() {
if ((antennae_ < 2) && (heads_ == 1)){
antennae_++;
return true;
}
return false;
}
bool Robot::addCell() {
if ((cells_ < 4) && (torsos_ == 1)) {
cells_++;
return true;
}
return false;
}
int Robot::countWheel() { return wheels_; }
int Robot::countAxle() { return axles_; }
int Robot::countHead() { return heads_; }
int Robot::countTorso() { return torsos_; }
int Robot::countPlunger() { return plungers_; }
int Robot::countAntenna() { return antennae_; }
int Robot::countCell() { return cells_; }
bool Robot::complete() {
if (wheels_ == 3 && torsos_ == 1 && axles_ == 3 && plungers_ == 1 &&
heads_ == 1 && cells_ == 4 && antennae_ == 2) {
return true;
}
return false;
}
RobotController.h
#ifndef ROBOTCONTROLLER_H
#define ROBOTCONTROLLER_H
#include <vector>
#include "Robot.h"
class RobotController {
public:
RobotController();
void initializeGame(int numPlayers);
void playGame();
private:
vector<Robot> m_Robots_;
};
#endif
RobotController.cpp
#include <iostream>
#include <vector>
#include "RobotController.h"
#include "Robot.h"
void RobotController::initializeGame(int numPlayers)
{
string name;
m_Robots_.clear();
m_Robots_.resize(numPlayers);
for (int i = 0; i < numPlayers; i++){
cout << "Player " << i+1 << " name: ";
getline(cin, name);
Robot robot;
m_Robots_.push_back(robot);
m_Robots_[i].setName(name);
m_Robots_[i].initialize();
}
}
void RobotController::playGame()
{
int toss;
srand(time(0));
int k = 0;
do{
for (int i = 0; i < m_Robots_.size(); i++){
cout << "Player " << i+1 << " starts" << endl;
toss = rand() % 7 + 1;
switch(toss){
case 1:
m_Robots_[i].addWheel();
break;
case 2:
m_Robots_[i].addAxle();
break;
case 3:
m_Robots_[i].addTorso();
break;
case 4:
m_Robots_[i].addPlunger();
break;
case 5:
m_Robots_[i].addHead();
break;
case 6:
m_Robots_[i].addAntenna();
break;
case 7:
m_Robots_[i].addCell();
break;
}
m_Robots_[i].print();
}
k++;
}while(!(m_Robots_[k].complete()));
cout << "Winner is: " << m_Robots_[k].getName() << "!";
}