Ошибка "Точка входа должна быть определена"

LonelyOwlet

Задание Для динамической структуры данных разработать класс, предусмотрев в нем конструкторы инициализации,копирования,перемещения, деструктор, функции вставки и удаления элемента, просмотра доступного элемента и функцию, проверяющую наличие элементов.Перегрузить операции присваивания, присваивание с перемещением, потокового вывода для вывода содержимого динамической структуры на экран.Вроде все сделала, однако он пишет, что "Точка входа должна быть определена" и я застопорилась, теперь туплю. Нужно написать main или что?3 файла:Queue.h:
#pragma once
#include"iostream"
#include"conio.h"
using namespace std;
 
class Qu
{
    int *arr;
    int count;
    int start = 0, end = 0, size = 0;
 
public:
    Qu(int count); //инициализация
    Qu(const Qu&other);//копировать
    Qu(Qu&&other);//переместить
    Qu&operator=(const Qu&other);//присвоить
    Qu&operator=(Qu&&other);//присвоить перемещением
    ~Qu();//деструктор
    int GetSize();
    void Push(int element);//Добавление
    int Pop();//Удаление
    int Peek();//Просмотр
    bool Check();//Проверить наличие
    friend ostream& operator << (ostream&stream, const Qu&a); //Вывести
};
Queue.cpp
#include"Queue.h"
#include"iostream"
#include"conio.h"
using namespace std;
 
Qu::Qu(int count)
{
    arr = new int[count];
}
 
Qu::~Qu()
{
    delete[] arr;
}
 
Qu::Qu(const Qu &other)
{
    arr = new int[other.count];
    count = other.count;
    end = other.end;
    start = other.start;
    size = other.size;
    for (int i = 0; i < count; ++i)
    {
        arr[i] = other.arr[i];
    }
}
 
Qu &Qu::operator=(const Qu &other)
{
    if (this == &other)
    {
        return *this;
    }
    delete[] arr;
    arr = new int[other.count];
    count = other.count;
    for (int i = 0; i < count; ++i)
    {
        arr[i] = other.arr[i];
    }
}
 
Qu &Qu::operator=(Qu &&other)
{
    if (this == &other)
    {
        return *this;
    }
    delete[] arr;
    arr = other.arr;
    count = other.count;
    other.arr = nullptr;
}
 
Qu::Qu(Qu &&other)
{
    arr = other.arr;
    count = other.count;
    other.arr = nullptr;
}
 
int Qu::GetSize()
{
    return this->size;
}
 
int Qu::Pop()
{
    if (size > 0)
    {
        int element = arr[start];
        start = (start + 1) % count;
        size--;
        return element;
    }
    return 0;
}
 
int Qu::Peek()
{
    return arr[start];
}
 
bool Qu::Check()
{
    return (size > 0);
}
 
void Qu::Push(int element)
{
    if (size < count)
    {
        arr[end] = element;
        end = (end + 1) % count;
        size++;
    }
}
 
ostream& operator << (ostream&stream, const Qu&a)
{
    Qu b = a;
    stream << "=====\n";
    for (int i = 0; i <b.count; i++)
    {
        stream << "| " << b.Pop() << "\n";
    }
    stream << "=====\n";
    return stream;
}
QueueTemp.h
#pragma once
#include"iostream"
#include"conio.h"
using namespace std;
 
template<typename T>
class QuTemp
{
    T *arr;
int count;
int end = 0, start = 0, size = 0;
 
public:
    QuTemp(int count); 
    QuTemp(const QuTemp &other);  
    QuTemp (QuTemp &&other); 
    QuTemp&operator=(const QuTemp &other); 
    QuTemp&operator=(QuTemp &&other); 
    ~QuTemp(); 
    int GetSize();
    void Push(T element); 
    T Pop(); 
    T Peek(); 
    bool Check(); 
    friend ostream& operator << (ostream&stream, const QuTemp<T>&a) 
};
 
template<typename T>
QuTemp<T>::QuTemp(int count)
    :count(count)
{
    arr = new T[count]
}
 
template<typename T>
QuTemp<T>::~QuTemp()
{
    delete[] arr;
}
 
template<typename T>
QuTemp<T>::QuTemp(const QuTemp&other)
{
    arr = new T[other.count];
    count = other.count;
    end = other.end;
    start = other.start;
    size = other.size;
    for (int i = 0; i < count; ++i)
    {
        arr[i] = other.arr[i];
    }
}
 
template<typename T>
QuTemp<T>&QuTemp<T>::operator=(const QuTemp&other)
{
    if (this == &other)
    {
        return *this;
    }
    delete[] arr;
    arr = new T[other.count];
    count = other.count;
    for (int i = 0; i < count; ++i)
    {
        arr[i] = other.arr[i];
    }
}
 
template<typename T>
QuTemp<T>&QuTemp<T>::operator=(QuTemp&&other)
{
    if (this == &other)
    {
        return *this;
    }
    delete[] arr;
    arr = other.arr;
    count = other.count;
    other.arr = nullptr;
}
 
template<typename T>
QuTemp<T>::QuTemp(QuTemp&&other)
{
    arr = other.arr;
    count = other.count;
    other.arr = nullptr;
}
 
template<typename T>
int QuTemp<T>::GetSize()
{
    return this->size;
}
 
template<typename T>
void QuTemp<T>::Push(T element)
{
    if (size < count)
    {
        arr[end] = element;
        end = (end + 1) % count;
        size++;
    }
}
 
template<typename T>
QuTemp<T>::Pop()
{
    if (size > 0)
    {
        T element = arr[start];
        start = (start + 1) % count;
        size--;
        return element;
    }
    return 0;
}
 
template<typename T>
QuTemp<T>::Peek()
{
    return arr[start];
}
 
template<typename T>
bool QuTemp<T>::Check()
{
    return (size > 0);
}
 
template<typename T>
ostream& operator << (ostream&stream, const QuTemp<T>&a)
{
    QuTemp<T> b = a;
    stream << "=====\n";
    for (int i = 0; i <b.count; i++)
    {
        stream << "| " << b.Pop() << "\n";
    }
    stream << "=====\n";
    return stream;
}
7 ответов

LonelyOwlet

LonelyOwlet, любая программа C++ имеет единственную точку входа, эта функция
int main()
{
    return 0;
}
по ходу дела у тебя ее в проекте нет


LonelyOwlet

Где точка входа, т.е. функция main()?


LonelyOwlet

Я сделала, но он ругается на E0519 - class "Qu" не может содержать список аргументов шаблона
#include"Queue.h"
#include"iostream"
#include"conio.h"
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Rus");
    Qu <int> queue;
 
    for (int i = 1; i < 5; i++)
        queue.Push((int)(i + 2));
 
    cout << queue << "\n";
    cout << queue.Pop() << "\n";
 
    for (int i = 1; i < 5; ++i)
        queue.Push((int)(i + 1));
    cout << queue << "\n";
    system("pause");
}


LonelyOwlet

LonelyOwlet, а у тебя класс ку есть?он вроде как QuTemp называется


LonelyOwlet

Есть, но я сейчас переделала слегка E0291 для класса "QuTemp<******>" не существует конструктор по умолчанию жалуетсяКороче, я запуталась
#include"Queue.h"
#include"QueueTemp.h"
#include"iostream"
#include"conio.h"
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Rus");
    QuTemp <******> queue;
 
    for (int i = 1; i < 5; i++)
        queue.Push((int)(i + 2));
 
    cout << queue << "\n";
    cout << queue.Pop() << "\n";
 
    for (int i = 1; i < 5; ++i)
        queue.Push((int)(i + 1));
    cout << queue << "\n";
    system("pause");
}


LonelyOwlet

LonelyOwlet, конструктор по умолчанию, это конструктор без параметров у тебя в классе нет такого, у тебя есть только Qu(int count); //инициализация, так что нужно вот так писать
QuTemp <******> queue(0);
ноль замени на нужный параметр.


LonelyOwlet

Спасибо, заработало!