我最近遇到了这个错误,我搜索了很多,但我找不到解决方案,我在visual studio 2010中创建了一个win 32控制台应用程序(c ++),并添加了2个头文件和1个带主函数的.cpp文件在其中,我没有改变项目的属性,你的帮助将非常感激。 这是我的代码:
//listNode.h:
#ifndef LISTNODE_H
#define LISTNODE_H
template< typename item > class Node
{
private:
item data;
Node<item> *next;
public:
Node( item d , Node<item> *n );
void setData( item d );
item getData();
void setNext( Node *n );
Node<item>* getNext();
};
template< typename item >
Node< item > :: Node( item d , Node *n )
{
data = d;
next = n;
}
template< typename item>
void Node< item > :: setData( item d )
{
data = d;
}
template< typename item>
item Node< item > :: getData()
{
return data;
}
template< typename item >
void Node< item > :: setNext( Node *n )
{
next = n;
}
template< typename item >
Node<item>* Node<item> :: getNext()
{
return next;
}
#endif
//list:
#ifndef LIST_H
#define LIST_H
#include "listNode.h"
template < typename item > class List
{
private:
Node<item> *first;
Node<item> *last;
int numberOfElements;
public:
List( Node<item> *f , Node<item> *l , int num );
~List();
void addFront( item d );
void addRear( item d );
void removeFront();
void removeRear();
item front();
item rear();
bool isEmpty();
int size();
void print();
};
template < typename item >
List<item> :: List( Node<item> *f , Node<item> *l , int num )
{
first = f;
last = l;
numberOfElements = num;
}
template < typename item >
List<item> :: ~List()
{
for( int i=0 ; i<nummerOfElements ; i++ )
{
Node<item> temp = *first;
delete *first;
first = temp.getNext();
}
first = 0;
last = 0;
numberOfElements = 0;
}
template < typename item >
void List<item> :: addFront( item d )
{
Node<item> newNode( d , first );
first = &newNode;
numberOfElements++;
}
template < typename item >
void List<item> :: addRear( item d )
{
Node<item> newNode;
newNode.setData(d);
if( numberOfElements != 0 )
*last.setNext( &newNode );
last = &newNode;
numberOfElements++;
}
template < typename item >
void List<item> :: removeFront()
{
if( numberOfElements != )
{
Node<item> temp = *first;
delete *first;
first = temp.getNext();
delete temp;
numberOfElements--;
}
else
cout << "list is already empty!\n"
}
template < typename item >
void List<item> :: removeRear()
{
if( numnerOfElements != 0 )
{
//finding the node before last :
Node<item> *beforeLast;
beforeLast = first;
while( true )
{
if( *beforeLast.getNext() == last )
break;
beforeLast = *beforeLast.getNext();
}
Node<item> temp = *last;
delete *last;
last = beforeLast;
delete temp;
numberOfElements--;
}
else
cout<< "list is already empty!\n"
}
template < typename item >
item List<item> :: front()
{
if( numberOfElements != 0 )
return *first.getData();
else
return
-1;
}
template < typename item >
item List<item> :: rear()
{
if( numberOfElements != 0 )
return *last.getData();
else
return -1;
}
template < typename item >
bool List<item> :: isEmpty()
{
if( numberOfElements == 0 )
true;
else
false;
}
template < typename item >
int List<item> :: size()
{
return numberOfElements;
}
#endif
//main.cpp:
#include <string>
#include<iostream>
using namespace std;
#include "list.h"
template < typename item >
int main()
{
string atom1("1");
string atom2("2");
string atom3("3");
string atom4("5");
string atom5("6");
List<item> l1();
l1.addRear( atom4 );
l1.addRear( atom5 );
List<item> l2();
l2.addRear( atom1 );
l2.addRear( atom2 );
l2.addRear( atom3 );
l2.addRear( l1 );
cout << l2.front()
return 0;
}
答案 0 :(得分:2)
main是C ++中的一个特殊功能 - 它不能是模板。如果可能的话,你会如何提供模板化的类型?我想也许你还不太了解模板。
我刚刚通过创建一个带有如下所示的main的VC ++控制台项目来检查这个:
template <typename T>
int main() {}
我得到了你得到的链接错误信息,但没有编译错误(应该有)。
答案 1 :(得分:0)
错误LNK2019:函数___ tmainCRTStartup中引用的未解析的外部符号_WinMain @ 16
Windows应用程序___tmainCRTStartup
作为其在启动时运行的CRT函数之一,调用主函数WinMain
有时表示为TWinMain
以支持双编译ascii / widechar。
相比之下,控制台应用使用main
你遗失WinMain
所以你有错误的项目类型或错误的主要方法
然后问题已经描述为you cannot use template on main