error LNK2019: 无法解析的外部符号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了error LNK2019: 无法解析的外部符号相关的知识,希望对你有一定的参考价值。
win32控制台程序,没使用动态库,设计了一个矩阵类模版,连接时产生
error LNK2019: 无法解析的外部符号 "public: virtual __thiscall matrix <double>::~matrix <double>(void)" (??1?$matrix@N@@UAE@XZ),该符号在函数 _wmain 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall matrix <double>::matrix <double>(void)" (??0?$matrix@N@@QAE@XZ),该符号在函数 _wmain 中被引用
matrix.h 如下
template <class T> class matrix
public:
//构造和析构
matrix();
matrix(int row,int col);
matrix(int row,int col,T value[]);
matrix(const matrix& other);
bool init(int row,int col);
void set(T value[]);
virtual ~matrix();
//构造和析构 end
......
matrix.cpp 如下
//构造和析构
template <class T> matrix <T>::matrix()
mp=NULL;
if(init(1,1)==0)
cout < <"矩阵初始化失败" < <endl;
.......
什么原因啊,是模版声明和定义时写的不对吗,请高手帮忙解决一下,谢谢了!
另外将成员函数定义放在主函数文件中就通过编译和连接了,不知问题出在哪
我用的是vs2008,和它有关吗?,另外模版编译是不是比较特别,要在头包含成员函数的实现文件,我也试过没成功,说声明和定义不匹配
模板类的“声明”和“实现”必须在“同一个”“文件”里,
要么都在matrix.h里 ,要么都在 matrix.cpp里本回答被提问者采纳
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,网上查说是查看变量的声明部分,或者类声明了没定义的问题。但是我找了半天也没有找到哪里出了问题。希望大家能帮我指出
应该写在一起,放在一个.hpp的文件内,否则会因为模板没有实例化(类是类模板的实例)而报找不到符号的链接错误。本回答被提问者采纳 参考技术B 出现这种原因其中可能就是你的函数和头文件里面声明的不一样,名字相同但参数不同或者类型不同,再或者是某些地方不支持,例如CString类型只有MFC才支持,到了控制台程序里就不受用
以上是关于error LNK2019: 无法解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章
error LNK2019: 无法解析的外部符号 WinMain,error LNK2001: 无法解析的外部符号 WinMain