Member.R Ответов: 1

Ошибка C++: неразрешенный внешний символ _main, на который ссылается функция " int_cdecl invoke_main (void)"


Когда я компилирую этот код, он выдает мне эту ошибку :
Неразрешенный внешний символ _main, на который ссылается функция " int_cdecl invoke_main (void)"
в чем проблема с моим кодом?

Что я уже пробовал:

основная функция :
#include "stdafx.h"
#include <iostream>
#include "myqueue.h"
using namespace std;
template <class T>
int main()
{
	myqueue <int> intQueue;
	cout <<"size ="<< intQueue.size() << endl;
	intQueue.add(10);
	intQueue.add(20);
	intQueue.add(30);
	cout << intQueue.retrieve() << endl;
	intQueue.remove();
	intQueue.add(40);
	intQueue.add(50);
	cout << intQueue.retrieve() << endl;
	intQueue.remove();
	intQueue.add(60);
	cout <<"size ="<< intQueue.size() << endl;
	while
		(!intQueue.isEmpty())
	{
		cout << intQueue.retrieve() << endl;
		intQueue.remove();
	}
	cout <<"size ="<< intQueue.size() << endl;
	return 0;
   
}



моя_очередь.ч:

#include<stack>
using namespace std;
template <class T>
class myqueue
{
private:stack <T> st1, st2;
public:
	myqueue();
	~myqueue();
	bool add(T element);
	T retrieve();
	bool remove();
	bool isEmpty();
	int size();
};


myqueue.cpp:

#include "stdafx.h"
#include "myqueue.h"
#include <stack>
using namespace std; 

template <class T>
myqueue<T>::myqueue()
{
}
template <class T>
myqueue<T>::~myqueue()
{
}
template <class T>
bool myqueue<T>::add(T element) {
	st1.push(element);
	return true;
}
template <class T>
bool myqueue<T>::isEmpty() {
	if (st1.size()== 0) {
		cout << "Empty queue" << endl;
		return true;
	}
	cout << "Not empty queue" << endl;
	return false;
}
template <class T>
int myqueue<T>::size() {
	return st1.size();
}
template <class T>
T myqueue<T>::retrieve() {
	while (!st1.empty) {
		st2.push(st1.top);
		st1.pop();
	}
	T item = st2.top();
	while (!st2.empty) {
		st1.push(st2.top());
		st2.pop();
	}
	return item;
}
template <class T>
bool myqueue<T>::remove() {
	if (!st1.empty) {
		while (!st1.empty) {
			st2.push(st1.top);
			st1.pop();
		}

		while (!st2.empty) {
			st1.push(st2.top());
			st2.pop();
		}
		return true;
	}
	else return false;
}

[no name]

Ваша основная функция не является шаблонным классом.

Member.R

Я на самом деле добавил: template & lt;class T> Перед основной функцией, потому что она дала мне сначала ошибки, говорящие : неразрешенный внешний символ " public_thiscall
моя_очередь И Л;int&ГТ;::моя_очередь И Л;int> У(ничтожным)
и то же самое для каждой функции в классе
поэтому, когда я думал, что добавление шаблона & lt;class T & gt; решит проблему...
Если бы вы знали, как решить эту проблему, я был бы вам очень благодарен !!

Albert Holguin

Ваше "исправление" сломало ожидаемый основной прототип. Ваша первоначальная проблема заключалась в том, что вы сигнализировали об ошибке, которую пытались исправить неправильно.

1 Ответов

Рейтинг:
2

Albert Holguin

Ваше главное не должно быть шаблоном, это ваша текущая ошибка. Ошибка, которую вы прокомментировали выше (в разделе комментариев), говорит вам, что компилятор не видит реализаций для экземпляра шаблона, это, вероятно, потому, что вы поместили этот код в файл cpp вместо заголовка.

Вот некоторые справочные ссылки на этот вопрос:
c++ - почему шаблоны могут быть реализованы только в заголовочном файле? - переполнение стека[^]
файлы шаблонов и заголовков c++ - переполнение стека[^]