Quantcast
Channel: CodeGuru Forums - Visual C++ Programming
Viewing all articles
Browse latest Browse all 3046

LNK2019 linker error when initializing an object

$
0
0
Hi all,

This is the code that I have. I got this code and I need to work with it:

Code:

#include <iostream>

#include "queueType.h"

int main()
{
    queueType<int> qt(100);

    for (int i = 0; i < 100; i++)
    {
        qt.addQueue(i);
    }

    return 0;
}

Code:

// queueTpe.h:

#pragma once

#include <iostream>

#include "queueADT.h"

template <class Type>
class queueType : public queueADT<Type>
{
public:
        //const queueType<Type>& operator=(const queueType<Type>&);

        queueType();

        queueType(int queueSize = 100);

        queueType(const queueType<Type>& otherQueue);

        ~queueType();

        bool isEmptyQueue() const;

        bool isFullQueue() const;

        void initializeQueue();

        Type front() const;

        Type back() const;

        void addQueue(const Type& queueElement);

        void deleteQueue();

        void moveNthFront(unsigned int value_iter);
private:
        int maxQueueSize;
        int count;
        int queueFront;
        int queueRear;
        Type* list;
};

Code:

// queueType.cpp:

#include "queueType.h"

template <class Type>
bool queueType<Type>::isEmptyQueue() const
{
        return (count == 0);
}

template <class Type>
bool queueType<Type>::isFullQueue() const
{
        return (count == maxQueueSize);
}

template <class Type>
void queueType<Type>::initializeQueue()
{
        queueFront = 0;
        queueRear = maxQueueSize - 1;
        count = 0;
}

template <class Type>
Type queueType<Type>::front() const
{
        assert(!isEmptyQueue());

        return list[queueFront];
}

template <class Type>
Type queueType<Type>::back() const
{
        assert(!isEmptyQueue());

        return list[queueRear];
}

template <class Type>
void queueType<Type>::addQueue(const Type& newElement)
{
        if (!isFullQueue())
        {
                queueRear = (queueRear + 1) % maxQueueSize;
                count++;
                list[queueRear] = newElement;
        }
        else
        {
                std::cout << "Cannot add to a full queue." << std::endl;
        }
}

template <class Type>
void queueType<Type>::deleteQueue()
{
        if (!isEmptyQueue())
        {
                count--;
                queueFront = (queueFront + 1) % maxQueueSize;
        }
        else
        {
                std::cout << "Cannot remove from an empty queue" << std::endl;
        }
}

template <class Type>
void queueType<Type>::moveNthFront(unsigned int value_iter)
{
        if (value_iter < maxQueueSize)
        {
                Type front_val = list[0];
                list[0] = list[value_iter];
                list[value_iter] = front_val;
        }
        else
        {
                std::cout << " ERROR: The iter value is larger than the maximum queue size." << std::endl;
        }
}

template <class Type>
queueType<Type>::queueType()
{
        maxQueueSize = 100;
        queueFront = 0;
        queueRear = maxQueueSize - 1;
        count = 0;
        list = new Type[maxQueueSize];
}

template <class Type>
queueType<Type>::queueType(int queueSize)
{
        if (queueSize <= 0)
        {
                std::cout << "Size of the array to hold the queue must be positive." << std::endl;
                std::cout << "Creating an array of size 100." << std::endl;
                maxQueueSize = 100;
        }
        else
        {
                maxQueueSize = queueSize;
        }

        queueFront = 0;
        queueRear = maxQueueSize - 1;
        count = 0;
        list = new Type[maxQueueSize];
}

template <class Type>
queueType<Type>::queueType(const queueType<Type>& otherQueue)
{
        queueFront = 0;
        queueRear = otherQueue.maxQueueSize - 1;
        count = 0;
        list = new Type[otherQueue.maxQueueSize];

        // copy the actual contents.
        for (int i = 0; i < otherQueue.maxQueueSize; i++)
        {
                list[i] = otherQueue.list[i];
        }
}

template <class Type>
queueType<Type>::~queueType()
{
        delete[] list;
}

Code:

// queueADT.h:

#pragma once

template <class Type>
class queueADT
{
public:
        virtual bool isEmptyQueue() const = 0;

        virtual bool isFullQueue() const = 0;

        virtual void initializeQueue() = 0;

        virtual Type front() const = 0;

        virtual Type back() const = 0;

        virtual void addQueue(const Type& queueElement) = 0;

        virtual void deleteQueue() = 0;
};

When I build it, I get the following errors:

Code:

Severity        Code        Description        Project        File        Line        Suppression State
Error        LNK2019        unresolved external symbol "public: __cdecl queueType<int>::queueType<int>(int)" (??0?$queueType@H@@QEAA@H@Z) referenced in function main        foo_bar_08        C:\Users\woo\source\repos\foo_bar_08\foo_bar_08.obj        1       
Error        LNK2019        unresolved external symbol "public: __cdecl queueType<int>::~queueType<int>(void)" (??1?$queueType@H@@QEAA@XZ) referenced in function main        foo_bar_08        C:\Users\woo\source\repos\foo_bar_08\foo_bar_08.obj        1       
Error        LNK2019        unresolved external symbol "public: void __cdecl queueType<int>::addQueue(int const &)" (?addQueue@?$queueType@H@@QEAAXAEBH@Z) referenced in function main        foo_bar_08        C:\Users\woo\source\repos\foo_bar_08\foo_bar_08.obj        1       
Error        LNK1120        3 unresolved externals        foo_bar_08        C:\Users\woo\source\repos\foo_bar_08\x64\Debug\foo_bar_08.exe        1

This doesn't make sense. All of the files are located in the same project. What is not being detected by the linker?

Viewing all articles
Browse latest Browse all 3046

Trending Articles