2

コピー コンストラクターまたはコンストラクターを定義しない場合、c++ はそれを自動
で定義し、浅いコピーと深いコピーを知っています
が、以下のコードには、コピー コンストラクターに関するバグがあるようです。

#include<iostream>
#include <vector>
using namespace std;

template<class T>
class Stack
{
    private:
        vector<T> stack;

    public:
    vector<T> returnStack()
    {
        return stack;
    }

        vector<T> returnStack() const
    {
            return stack;
    }

    void Push(T item)
    {
        stack.insert(stack.begin()+stack.size(),item);
    }

    friend Stack operator+(const Stack &one,const Stack &other);
};

template<class T>
Stack<T>  operator+(const Stack<T> &one,const Stack<T> &other)
{
    Stack<T> newStack;
    for (typename vector<T>::size_type i = 0; i < one.returnStack().size(); i++)
    {
        newStack.Push(one.returnStack()[i]);
    }
    for (typename vector<T>::size_type i = 0; i < other.returnStack().size(); i++)
    {
        newStack.Push(other.returnStack()[i]);
    }
    return newStack;
}

int main()
{
    Stack <int > a;
    Stack <int > b;
    a.Push(1);
    a.Push(2);
    b.Push(3);
    b.Push(4);
    Stack <int> c=a+b ;//have a bug
    return 0;
}

上記のコードは以下のエラーを認識します
undefined reference to operator+(Stack<int> const&, Stack<int> const&)'

デバッグにかなりの時間を費やしていますが、疲れました。

4

2 に答える 2