Я использую C ++ и пытаюсь создать шаблонный класс (стек).
Я хотел бы определить конструктор копирования и оператор присваивания.
Они определены в заголовке, а затем я реализую их в файле cpp.
Вот проблемы, которые я получаю:
- Для конструктора копирования:
прототип ‘Stack :: Stack (const Stack &)’ не соответствует ни одному в классе ‘Stack’
- Для оператора присваивания:
stack.cpp: 28: ошибка: нет функции-члена Stack & Stack :: operator = (const Stack &) ', объявленной в классе' Stack '
- для конструктора:
stack.cpp: 4: ошибка: кандидат: Stack :: Stack ()
Вот заголовочный файл:
// stack.hpp
#ifndef STACK_HPP
#define STACK_HPP
#include <stdio.h>
#include <assert.h>
template <class T>
class Stack
{
public:
Stack();
~Stack();
Stack(const Stack&);
Stack& operator=(const Stack&);
private:
T* v_;
size_t vsize_;
size_t vused_;
};
Вот файл cpp:
// stack.cpp
#include "stack.hpp"
template <class T>
Stack<T>::Stack() :
v_(0),
vsize_(10),
vused_(0)
{
v_ = new T[vsize_];
}
template <class T>
Stack<T>::~Stack()
{
delete[] v_;
}
// Stack(const Stack&);
template <class T> Stack<T>::Stack( const Stack<T>& other) :
v_(NewCopy(other.v, other.vsize_, other.vsize_)),
vsize_(other.vsize_),
vuser_(other.vused)
{
}
// Stack& operator=(const Stack&);
template<class T> Stack<T>& Stack<T>::operator=(const Stack<T>& other)
{
if (this != &other)
{
T* v_new = NewCopy(other.v_, other.vsize_, other.vsize__;
delvete v_;
v_ = v_new
vsize_ = other.vsize_;
vused_ = other.vused_;
}
return *this
}
И последнее, вот журнал из компиляции:
g++ -c stack.cpp -o stack.o
stack.cpp:20: error: prototype for ‘Stack<T>::Stack(const Stack<T>&)’ does not match any in class ‘Stack<T>’
stack.cpp:4: error: candidate is: Stack<T>::Stack()
stack.cpp:28: error: no ‘Stack<T>& Stack<T>::operator=(const Stack<T>&)’ member function declared in class ‘Stack<T>’
Я уверен, что это только небольшая ошибка при опечатке, но я не могу ее найти.
Спасибо за вашу помощь