关于c++ error LNK2019: unresolved external symbol 问题

问题描述

关于c++ error LNK2019: unresolved external symbol 问题
我运行了一个程序,报出如下错:
Error 1 error LNK2019: unresolved external symbol ""public: __thiscall CircList::CircList(int)"" (??0?$CircList@N@@QAE@H@Z) referenced in function _wmain
Error 2 error LNK2019: unresolved external symbol ""public: __thiscall CircList::~CircList(void)"" (??1?$CircList@N@@QAE@XZ) referenced in function _wmain
Error 3 error LNK2019: unresolved external symbol ""public: struct CircListNode * __thiscall CircList::Locate(int)"" (?Locate@?$CircList@N@@QAEPAU?$CircListNode@N@@H@Z) referenced in function ""void __cdecl Josephus(class CircList &intintint)"" (??$Josephus@N@@YAXAAV?$CircList@N@@HHH@Z)

Error 4 error LNK1120: 3 unresolved externals
程序代码如下:

 #ifndef CIRCLIST_H_#define CIRCLIST_H_template <class T>struct CircListNode{    T data;    CircListNode<T> * link;};template <class T>class CircList{private:    CircListNode<T> * first;public:    CircList(){}    CircList(int i);    ~CircList();    CircListNode<T> * Locate(int i);};#endif
 #include ""stdafx.h""#include ""circList.h""#include <iostream>using namespace std;template<class T>CircList<T>::CircList(int i){    T value;    first = new CircListNode < T > ;    for (int j = 0; j < i; j++)    {        CircListNode<T> * newNode = new CircListNode < T > ;        cout << ""请输入第"" << j + 1 << ""个节点的值:"";        getline(cin value);        newNode->data = valude;        newNode->link = first->link;        first->link = newNode;    }    cout << ""一个包含"" << i << ""个节点的循环表建立成功!"" << endl;}template<class T>CircList<T>::~CircList(){    CircListNode<T> * q;    while (first->link != NULL)    {        q = first->link;        first->link = q->link;        delete q;    }    delete first;}template<class T>CircListNode<T> * CircList<T>::Locate(int i){    CircListNode<T> * current = new CircListNode < T > ;    if (current == NULL)    {        cout << ""内存分配错误!"" << endl;        return NULL;    }    else    {        current = first->link;        for (int j = 1; j < i - 1; j++)            current = current->link;        return current;    }}
 // ex2-5.cpp : Defines the entry point for the console application.//#include ""stdafx.h""#include <iostream>#include ""circList.h""using namespace std;template<class T>void Josephus(CircList<T> & js int n int s int m);int _tmain(int argc _TCHAR* argv[]){    int n s m;    cout << ""请输入游戏人数、开始位置和报数间隔: "";    cin >> n >> s >> m;    CircList<double> clist(n);    Josephus(clist n s m);    return 0;}template<class T>void Josephus(CircList<T> & js int n int s int m){    CircListNode<T> * p = js.Locate(s) *pre = NULL;    for (int i = 0; i < n - 1; i++)    {        for (int j = 1; j < m; j++)        {            pre = p;            p = p->link;        }        cout << ""出列的人是"" << p->data << endl;        pre->link = p->link;        p = pre->link;    }}

求大神解释一下,谢谢了

解决方案

模板函数的定义原则上应该和声明放在同一个文件里。你的这里,虽然代码里有

 #include ""circList.h""

但是编译器将模板实例化的时候找不到构造和析构函数的定义,因此才出现unresolved external symbol的问题。

你可以把你的函数定义加在头文件里,你也可以上网搜一下其他的模板函数的写法,比如我一直认为很别扭的#include ""xxx.cpp"" ...

解决方案二:
main.obj : error LNK2019: unresolved external symbol ""public: virtual __thiscall CvSVM::~CvSVM(void)"" (??1CvSVM@@UAE@XZ) referenced in function _main
1>main.obj : error LNK2019: unresol......
答案就在这里:error LNK2019: unresolved external symbol 问题

解决方案三:
CircList定义有问题

解决方案四:
模板函数声明在circList.h,而实现在circList.cpp,编译就会报错,原因为:模板函数在编译中就会实例化,把声明和定义分开,在一个编译单元内,及头文件展开后。在编译的时候虽然能找到函数声明,但是没有定义。
参考:http://blog.sina.com.cn/s/blog_5c8b05eb0100xzjg.html

时间: 2024-10-28 13:41:52

关于c++ error LNK2019: unresolved external symbol 问题的相关文章

c++-Skia的连接错误,无法解析的外部符号(LNK2019: unresolved external symbol)

问题描述 Skia的连接错误,无法解析的外部符号(LNK2019: unresolved external symbol) 我在下载了Google的2D图形引擎后,编译了源码,把生成的静态库(lib)文件都放到了自己的工程目录下,并在自己工程的源文件中定义了一个SKBitmap map;的一个对象.在连接时却出现了3个连接错误. 1>TestSkiaDlg.obj : error LNK2019: unresolved external symbol "public: __thiscall

lnk-error LNK2019: unresolved external symbol ***** referenced in function _main

问题描述 error LNK2019: unresolved external symbol ***** referenced in function _main 是这样的.VS2010一个解决方案下我有4个工程文件,我在其中一个工程中,添加a.h,声明了函数:又添加了一个a.c文件,在a.c文件中#include"a.h",然后实现了在a.h中声明的函数,然后再main函数中就调用了实现的函数,于是就出现了上面的链接问题,我已经实现了该函数,并且在main中包含了a.h,为什么还会出

c++-error LNK2001: unresolved external symbol

问题描述 error LNK2001: unresolved external symbol #include #include #include #include #include #include #pragma once using namespace std; void show_main_menu(int); class Student { public: char num[10]; char name[10]; char sex; int chinese; .......balbal

编程-opencv hello.obj : error LNK2001: unresolved external symbol _cvNamedWindow

问题描述 opencv hello.obj : error LNK2001: unresolved external symbol _cvNamedWindow 使用的是vs2012 ultimate 和opencv2.4.2,配置基本成功,配置情况贴在后面 源程序如下: #include #include //#pragma comment(lib,"cv.lib") //#pragma comment(lib,"highgui.lib") int main()

学习copyhook,出现错误LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

问题描述 从网上弄了一个copyhook的程序,学习用,但是运行后这个错误没有办法解决-- 解决方案 解决方案二:顺便说,我用的是vc6.0期待哪位有经验的给予指点,最近开始对这个感兴趣了解决方案三:自己顶~热情期待哪位的指点~

vs qt 2001-error LNK2001: unresolved external symbol

问题描述 error LNK2001: unresolved external symbol 在VS2008上安装了qt-4.8的编译环境,再编译QT程序时遇到下列错误,应该是少添加了.ib文件. 不过不知道加什么.lib文件,求大神指教.. 解决方案 这个一般楼主得自己找啊... 1.是不是用到了外部的一些链接库,可以在.pro文件中加入LIBS += -lxxxxxxx 2.改动了一些东西以后可以尝试删除掉build--XX--Debug目录,让它重新生成一下 最后祝楼主成功!! 解决方案二

提示出现unresolved external symbol _main的解决方法_C#教程

提示出现unresolved external symbol _main搜了下找了下原因如下在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有: libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main LIBCD.lib(wincrt0.obj) : error LNK2001: unre

opengl-Opengl:unresolved external symbol

问题描述 Opengl:unresolved external symbol unresolved external symbol ___glutInitWithExit@12新安装了OPENGL库之后就这样了,从来没有遇到过这种类型的问题,求大神指点 解决方案 我猜测是头文件没有正确的包含,或者是库的位置路径没有设置正确

c++-VS2013,C++,error LNK2019和LNK1120

问题描述 VS2013,C++,error LNK2019和LNK1120 output:1>------ Build started: Project: chapter5 使用序列式容器并分析字符串, Configuration: Debug Win32 ------ 1> Source.cpp 1>Source.obj : error LNK2019: unresolved external symbol "class std::vector,class std::allo