samedi 14 mars 2015

C++ Linker Error - Defining things twice


To start off, I'm kind of new to instantiation files, headers, and source files. I'm trying to get my code to compile, but I keep hitting a linker error where it says that I'm defining something twice.


I have 6 Files: - Instantiation.cpp Lab5.cpp Students.cpp Queue.cpp Students.h Queue.h


Instantiation:



#include "Students.cpp"
#include "Lab5.cpp"
#include "Queue.cpp"

template class Queue<int>;
template class QueueNode<int>;
template class Queue < Students* >;
template class QueueNode < Students* >;


Lab5:



#include "Queue.h"
#include "Students.h"
#include <iostream>
using namespace std;
int main(){
Queue <Students*> studentQueue;
Queue <int> integerQueue;
return 0;
}


Students.cpp:



#include "Students.h"
Students::Students(){
}
void Students::printStudent(){
}


Queue.cpp:



#include "Queue.h"
template <class DataType>
Queue<DataType>::Queue(int i){
i = queueSize;
}
template <class DataType>
Queue<DataType>::~Queue(){
}
template <class DataType>
void Queue<DataType>::enQueue(const DataType){
}
template <class DataType>
DataType Queue<DataType>::deQueue(){
return 0;
}
template <class DataType>
DataType Queue<DataType>::topQueue() const {
return 0;
}
template <class DataType>
bool Queue<DataType>::isEmpty() const {
return true;
}
template <class DataType>
bool Queue<DataType>::isFull() const{
return true;
}


Students.h:



#ifndef STUDENTS_H
#define STUDENTS_H
class Students{
public:
char lastName[20];
char firstName[20];
int ID; // ID
Students(); // constr
void printStudent(); // print info
};
#endif


Queue.h:



#ifndef QUEUE_H
#define QUEUE_H

template <class DataType>
class QueueNode {
public:
DataType data;
QueueNode<DataType> *next;
};
template <class DataType>
class Queue {
private:
QueueNode<DataType> *front;
QueueNode<DataType> *back;
int queueSize; // size of a Queue
int queueCnt; // elem count in a Queue
public:
Queue(int = 10); // class constr. - initialize vars
~Queue(); // class destructor - remove all mem space used by queue elems
void enQueue(const DataType); // add item to back of queue
DataType deQueue(); // remove first item from queue and return its value
DataType topQueue() const; // return the value of the first item in the queue
bool isEmpty() const; // returns true if there are no elems in the queue
bool isFull() const; // returns true if no system mem for a new queue node
};
#endif


Here's the output: http://ift.tt/1NWqBab


Please, help. I don't really get why it thinks I'm defining anything twice.




Aucun commentaire:

Enregistrer un commentaire