I am getting a LNK2005 error when attempting to run a build. My program compiles, but does not link, and crashes when ran. The error seems to be in either the SStack.h
or the SStack.cpp
file. I do not know why there is a linking error.
The exact error is
LNK2005 "public: bool __thiscall SStack::IsEmpty(void)const " (?IsEmpty@SStack@@QBE_NXZ) already defined in Main.obj Project02_SchaferSam C:\Users\Sam\source\repos\Project02_SchaferSam\SStack.obj 1
This is the same for every one of my constructors and member functions, they all have the same error. I have deleted the SStack.obj
file and tried a clean make, but the error still persists.
The SStack.h code:
//CONTENTS: Declares Class SStack, with data members, constructors and member function prototypes
//If you want, you can make minor changes to this header file
#ifndef _StackClass_
#define _StackClass_
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
class SStack
{
public:
// Constructor
SStack( int cap);
// Copy Constructor
SStack( const SStack& s );
~SStack( ); //destructor
// The member function push: Precondition: the stack is not full.
void push ( const std::string s);
// The member function pop: Precondition: the stack is not empty.
void pop ();
// The member function top: Precondition: the stack is not empty.
string top () const;
bool IsEmpty () const;
//printing all the elements in the stack
void print() const;
int size() const;
int getCapacity() const;
private:
int capacity; // Capacity is the maximum number of items that a stack can hold
std::string* DynamicStack;
int used; // How many items are stored in the stack
};
#endif
The SStack.cpp code:
#include <iostream>
#include "SStack.h"
SStack::SStack(int cap)
{
DynamicStack = new string[cap];
this->capacity = cap;
this->used = -1;
}
SStack::SStack(const SStack& s)
{
capacity = s.capacity;
DynamicStack = new string[capacity];
used = s.used;
for (int i = 0; i < used; i++) {
DynamicStack[i] = s.DynamicStack[i];
}
}
SStack::~SStack()
{
}
void SStack::push(const std::string s)
{
if (used >= capacity - 1) {
cout << "Stack overflow" << endl;
}
else {
this->used++;
DynamicStack[used] = s;
cout << s << "pushed onto the stack" << endl;
}
}
void SStack::pop()
{
if (used < 0) {
cout << "stack underflow" << endl;
}
else {
string s = DynamicStack[used];
this->used--;
}
}
string SStack::top() const
{
if (used < 0) {
cout << "stack is empty" << endl;
return 0;
}
else {
string s = DynamicStack[used];
return s;
}
}
bool SStack::IsEmpty() const
{
if (used < 0) {
return true;
}
else {
return false;
}
}
void SStack::print() const
{
for (int i = used; i >= 0; i--) {
cout << DynamicStack[used] << endl;
}
}
int SStack::size() const
{
return used;
}
int SStack::getCapacity() const
{
return capacity;
}
The main.cpp code is currently empty:
// Project02_SchaferSam.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include "SStack.cpp"
#include "SStack.h"
int main()
{
}