C ++错误:函数“int_cdecl invoke_main(void)”中引用的未解析的外部符号_main [英] C++ error:unresolved external symbol _main referenced in function "int_cdecl invoke_main(void)"

查看:286
本文介绍了C ++错误:函数“int_cdecl invoke_main(void)”中引用的未解析的外部符号_main的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我编译这段代码时,它给了我这个错误:

函数int_cdecl invoke_main(void)中引用的未解析的外部符号_main

我的代码有什么问题?



我的尝试:



主要功能:

  #include      stdafx.h 
#include < iostream >
#include myqueue.h
使用 namespace std;
模板< 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 ;

}







myqueue.h:



  #include   <   stack  >  
< span class =code-keyword>使用 命名空间标准;
模板< 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:



< pre lang =C ++> #include stdafx.h
#include myqueue.h
#include < stack >
使用 命名空间 std;

模板< class T>
myqueue< T> :: myqueue()
{
}
模板< class T>
myqueue< T> ::〜myqueue()
{
}
模板< class T>
bool myqueue< T> :: add(T element){
st1.push(element);
return true ;
}
模板< class T>
bool myqueue< T> :: isEmpty(){
if (st1 .size()== 0 ){
cout<< 空队列<< ENDL;
return true ;
}
cout<< 非空队列<< ENDL;
return false ;
}
模板< class T>
int myqueue< T> :: size(){
return st1。尺寸();
}
模板< class T>
T myqueue< T> :: retrieve(){
while (!st1.empty){
st2.push(st1 。最佳);
st1.pop();
}
T item = st2.top();
while (!st2.empty){
st1.push(st2.top());
st2.pop();
}
返回项目;
}
模板< 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();
}
返回 true ;
}
其他 返回 false ;
}

解决方案

你的主要不应该是模板,这是你当前的错误。您在上面评论的错误(在评论部分中)告诉您编译器没有看到模板实例的实现,这可能是因为您将该代码放在cpp文件而不是标题中。



以下是此问题的一些参考链接:

c ++ - 为什么模板只能在头文件中实现? - 堆栈溢出 [ ^ ]

c ++模板和头文件 - Stack Overflow [ ^ ]

When I compile this code it gives me this error :
Unresolved external symbol _main referenced in function "int_cdecl invoke_main(void)"
what's the problem with my code?

What I have tried:

main function :

#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;
   
}




myqueue.h:

#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;
}

解决方案

Your main shouldn't be a template, that's your current error. The error you commented on above (in comments section) is telling you that the compiler doesn't see the implementations for the template instance, this is probably because you put that code in a cpp file instead of the header.

Here are some reference links to this issue:
c++ - Why can templates only be implemented in the header file? - Stack Overflow[^]
c++ template and header files - Stack Overflow[^]


这篇关于C ++错误:函数“int_cdecl invoke_main(void)”中引用的未解析的外部符号_main的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆