error LNK2019: 无法解析的外部符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了error LNK2019: 无法解析的外部符相关的知识,希望对你有一定的参考价值。

错误 2 error LNK2019: 无法解析的外部符号 "public: class Node __thiscall SeqStack<class Node>::Pop(void)" (?Pop@?$SeqStack@VNode@@@@QAE?AVNode@@XZ),该符号在函数 "void __cdecl go(int,int,int,int)" (?go@@YAXHHHH@Z) 中被引用 D:\UserData\Administrator\桌面\迷宫\Maze\迷宫\main.obj Maze

错误 3 error LNK2019: 无法解析的外部符号 "public: void __thiscall SeqStack<class Node>::Push(class Node)" (?Push@?$SeqStack@VNode@@@@QAEXVNode@@@Z),该符号在函数 "void __cdecl go(int,int,int,int)" (?go@@YAXHHHH@Z) 中被引用 D:\UserData\Administrator\桌面\迷宫\Maze\迷宫\main.obj Maze

代码:
Node.cpp

class Node
public:
int n;
int m;
;

SeqStack.h
const int StackSize=100;
template<class DataType>
class SeqStack

public:
SeqStack()top=-1;
~SeqStack()
void Push(DataType x);
DataType Pop();
DataType GetTop()if (top!=-1)return data[top];
int Empty()top==-!?return 1:return 0;
private:
DataType data[StackSize];
int top;
;

SeqStack.cpp

#include"SeqStack.h"
#include"Node.cpp"
template <class DataType>
void SeqStack<DataType>::Push(DataType x)

if(top==SeqStack-1)
throw "上溢";
data[++top]=x;

template<class DataType>
DataType SeqStack<DataType>::Pop()

if(top==-1)
throw "下溢";
x=data[top--];
return x;


main.cpp

#include<iostream>
#include"SeqStack.h"
#include"Node.cpp"
using namespace std;
int M[10][10]=0;
SeqStack<Node> a;
void go(int i,int j,int z,int d)

Node* p=&(a.GetTop());
if(M[i][j]==0)

if(p->n==z&&p->m==d)

//写个输出路径函数

else
Node t;
t.n=i; t.m=j+1;
a.Push(t);
go(p->n,(p->m)+1,z,d);
go((p->n)+1,p->m,z,d);
go(p->n,(p->m)-1,z,d);
go((p->n)-1,p->m,z,d);


else

a.Pop();
p=&(a.GetTop());


int main()


cout<<"请输入迷宫"<<endl;
for(int i=0;i<10;i++) //i 行号

for(int j=0;j<10;j++) //j 列号

cout<<"第"<<i<<"行"<<j<<"列的元素为"<<endl;
int m;
cin>>m;
M[i][j]=m;


cout<<"请输入起始位置和终点位置"<<endl;
int i,j,z,d;
cin>>i>>j>>z>>d;
go(i,j,z,d);


我写的是走迷宫的程序,链接的时候总是出现2019,网上查说是查看变量的声明部分,或者类声明了没定义的问题。但是我找了半天也没有找到哪里出了问题。希望大家能帮我指出

参考技术A 模板的定义和实现不要分离开来(即不要分开写在.h和.cpp)中。
应该写在一起,放在一个.hpp的文件内,否则会因为模板没有实例化(类是类模板的实例)而报找不到符号的链接错误。本回答被提问者采纳
参考技术B 出现这种原因其中可能就是你的函数和头文件里面声明的不一样,名字相同但参数不同或者类型不同,再或者是某些地方不支持,例如CString类型只有MFC才支持,到了控制台程序里就不受用

error LNK2001: 无法解析的外部符号

1>正在链接...
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _GUID_Download
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _GUID_StandardMIDIFile
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _IID_IDirectMusicSegment
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _CLSID_DirectMusicSegment
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _GUID_DirectMusicAllTypes
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _GUID_Unload
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _CLSID_DirectMusicLoader
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _IID_IDirectMusicLoader
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _CLSID_DirectMusicPerformance
1>DirectAudio.obj : error LNK2001: 无法解析的外部符号 _IID_IDirectMusicPerformance
怎么解决
.lib文件的路径设好了的
#pragma comment(lib, "dsound.lib")

参考技术A int
c,m[];一句中必须给m数组一个常量表示的长度,比如int
c,m[32];
不能在方括号中用变量来表示元素的个数,但是可以用符号常数或常量表达式。
我估计你是想实现一个动态数组,推荐你使用vector实现。
参考技术B 你的ctestdlg的析构函数,只有函数名称,但没有具体的实现。所以链接时,无法找到函数的执行体。
缺少下面这个语句:
ctestdlg::~ctestdlg(void)

参考技术C .lib文件的路径设好没有?看样子是directX的库文件找不到。本回答被提问者采纳 参考技术D 是不是该obj文件损坏?

以上是关于error LNK2019: 无法解析的外部符的主要内容,如果未能解决你的问题,请参考以下文章

error LNK2019: 无法解析的外部符号

error LNK2019: 无法解析的外部符号

error LNK2019: 无法解析的外部符号

error LNK2019: 无法解析的外部符号

error LNK2019: 无法解析的外部符号

error LNK2019: 无法解析的外部符号 求解答..