0

I have searched through the internet for this error, but did not find anything to help me. I received this error "linker command failed with exit code 1" and when I tried an online compiler, I have received this:

main.cpp:(.text.startup+0x121): undefined reference to `Sorting::Sorting()' collect2: error: ld returned 1 exit status

Can someone please help me out?

#include <iostream>
#include <vector>

class Sorting
{
public:
    Sorting();
    std::vector<int> Sort(std::vector<int> mainArray)
    {
        auto mainArray_Size = mainArray.size();
        //if(mainArray_Size < 2) { return ; }

        int middle = mainArray_Size / 2;
        std::vector<int> left(middle);
        std::vector<int> right (mainArray_Size - middle);

        //std::vector<int>::iterator iter;

        // Split in half.

        for(auto iter = mainArray.begin(); iter < left.end(); ++iter)
        {
            left.push_back(*iter);
        }

        // Start at middle of vector.
        for(auto iter = mainArray.begin() + mainArray.size() / 2; iter != mainArray.end(); ++iter)
        {
            right.push_back(*iter);
        }

        Sort(left);
        Sort(right);
        Merge(left, right, mainArray);

        return mainArray;
    }

    void Merge(std::vector<int> firstHalf, std::vector<int> secondHalf, std::vector<int> mainVector)
    {
        auto firstHalf_Size = firstHalf.size();
        auto secondHalf_Size = secondHalf.size();

        std::vector<int>::iterator iter_FirstHalf = firstHalf.begin();
        std::vector<int>::iterator iter_SecondHalf = secondHalf.begin();

        // May not reach the end of the vector.
        while(firstHalf.begin() != firstHalf.end() && secondHalf.begin() != secondHalf.end())
        {
            if(*iter_FirstHalf <= *iter_SecondHalf)
            {
                mainVector.push_back(*iter_FirstHalf);
                ++iter_FirstHalf;
            }
            else
            {
                mainVector.push_back(*iter_SecondHalf);
                ++iter_SecondHalf;
            }
        }

        // Any leftovers.
        while(iter_FirstHalf != firstHalf.end())
        {
            mainVector.push_back(*iter_FirstHalf);
            ++iter_FirstHalf;
        }

        while(iter_SecondHalf != secondHalf.end())
        {
            mainVector.push_back(*iter_SecondHalf);
            ++iter_SecondHalf;
        }
    }
};

int main(int argc, const char * argv[]) {

    std::vector<int> sortThis;

    sortThis.push_back(4);
    sortThis.push_back(1);
    sortThis.push_back(2);
    sortThis.push_back(8);
    sortThis.push_back(3);
    sortThis.push_back(4);
    sortThis.push_back(9);
    sortThis.push_back(10);

    for(auto iter = sortThis.begin(); iter != sortThis.end(); ++iter)
    {
        std::cout << *iter << " ";
    }

    std::cout << std::endl;

    Sorting sort;
    sort.Sort(sortThis);


    for(auto iter = sortThis.begin(); iter != sortThis.end(); ++iter)
    {
        std::cout << *iter << " ";
    }

    return 0;
};
AGIII
  • 48
  • 1
  • 5

1 Answers1

2

You forgot to provide an implementation for your declared constructor Sorting(). So either do not declare the constructor, or implement it, e.g.:

class Sorting
{
public:
    Sorting() { };
    ...
Stephan Lechner
  • 34,891
  • 4
  • 35
  • 58