0

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()
{
    
    
}
Remy Lebeau
  • 555,201
  • 31
  • 458
  • 770
  • 4
    Don't `#include` cpp files, only compile them. – cigien Oct 13 '20 at 21:08
  • *"does not link, and crashes when ran."* -- if the program does not link, then there is nothing to run. You must be running an old build, from before this error. (Next time, you might have to manually delete the executable to verify that it is not being built.) – JaMiT Oct 13 '20 at 22:05

0 Answers0