vector 构造二维矩阵出现 LNK2019: 无法解析的外部符号

unicornhx 2009-08-08 06:32:52
小弟想学习下模板和vector 就编写了如下 代码
但编译时出现

正在链接...
main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Matrix::~Matrix(void)" (??1?$Matrix@H@@QAE@XZ),该符号在函数 _main 中被引用
main.obj : error LNK2019: 无法解析的外部符号 "public: static void __cdecl Matrix::Display(class Matrix &)" (?Display@?$Matrix@H@@SAXAAV1@@Z),该符号在函数 _main 中被引用
main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Matrix::Matrix(int,int,int)" (??0?$Matrix@H@@QAE@HHH@Z),该符号在函数 _main 中被引用
d:\My Documents\Visual Studio 2008\Projects\MagicMatrix\Debug\MagicMatrix.exe : fatal error LNK1120: 3 个无法解析的外部命令

另外我是在vs2008 中使用 “空项目”创建的工程,添加类和Cpp文件 不知道这是不是根源
如果有其他错误还望 大家多多指正~~~ 谢谢各位了~

// Matrix.h
#if!defined _MATRIX_H
#define _MATRIX_H
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class Matrix
{
public:
Matrix(void);
~Matrix(void);
Matrix(int r,int c,T i); //给矩阵初始化,值全部设为 i
static void Display(Matrix<T> &M); //显示所有元素
private:
int row,col;
vector<vector<T> > matrix;//看到有人提示这里不能直接为">>",我在中间添加了空格
};
#endif



// Matrix.cpp
#include "Matrix.h"
template<typename T>
Matrix<T>::Matrix(void) // 1?我想默认初始化一个空的矩阵 不知道这样写对吗?
{row=0;
col=0;
matrix(row,vector<T> (col,0)); //2?初始化对任意类型 可以用0吗? 用NULL 行吗?
}
template<typename T>
Matrix<T>::~Matrix(void)
{}

template <typename T>
Matrix<T>::Matrix(int r,int c,T i):

row(r),col(c),
matrix(row,vector<T> (col,i))
{}
template <typename T>
void Matrix<T>::Display(Matrix<T> & M)
{
for(int i=0;i<M.row;i++)
for(int j=0;j<M.col;j++)
{cout<<M.[i][j];}
cout<<endl;
}



//主程序
#include "Matrix.h"
#include <iostream>
using namespace std;
void main()
{
Matrix<int> Mat= Matrix<int>(2,2,0); //3? 这样写有误吗? 有什么其他写法吗?
Matrix<int>::Display(Mat);
}
...全文
422 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
丈八涯 2009-08-10
  • 打赏
  • 举报
回复
模板也不是非要放到头文件里,不过我一直都是放到头文件里.:)

另外使用模板,却还要通过输入,这种结构让人不太理解,并且也比较危险.
unicornhx 2009-08-09
  • 打赏
  • 举报
回复
=) 谢谢 恩 确实是要添加 cpp文件
不过好像不是重载“<<” 应该是二维数组下标 “[]”
看到网上有些重载方法是
需要 先写一个一维的类 重载[]
然后在继承一个二维的类 再重载一次[]
不知道大家还有什么好方法 请赐教~~

[Quote=引用 2 楼 currenttt 的回复:]
如果按照LZ的方法创建工程,需要在主程序中增加一句:
#include "Matrix.cpp"
但是这个时侯还有错误:
C/C++ code
template<typename T>void Matrix<T>::Display(Matrix<T>& M)
{for(int i=0;i<M.row;i++)for(int j=0;j<M.col;j++)
{cout<<M[i][j];}//问题在这里:对于类型T,需要重载运算符<< cout<<endl;
}
[/Quote]
unicornhx 2009-08-09
  • 打赏
  • 举报
回复
没有问题啊 我以前还写了一个模板类vector 没有放在在一个文件里
只不过在.cpp 里的每个函数实现前面加上 template <typename T> 就可以运行了
[Quote=引用 1 楼 arong1234 的回复:]
模板类的实现和普通类不一样,必须都放在头文件里
你看看vector自己的实现就知道了
[/Quote]
arong1234 2009-08-08
  • 打赏
  • 举报
回复
只要常用编译器不支持,就应该尽量避免使用
[Quote=引用 3 楼 haoshen1987 的回复:]
用模板时,类的定义与实现在不同文件的话,要用关键字export,但目前好像很少有编译器支持。
建议写在同一文件中试试。
[/Quote]
hua_zhixing_ 2009-08-08
  • 打赏
  • 举报
回复
用模板时,类的定义与实现在不同文件的话,要用关键字export,但目前好像很少有编译器支持。
建议写在同一文件中试试。
currenttt 2009-08-08
  • 打赏
  • 举报
回复
如果按照LZ的方法创建工程,需要在主程序中增加一句:
#include "Matrix.cpp"
但是这个时侯还有错误:

template <typename T>
void Matrix<T>::Display(Matrix<T> & M)
{
for(int i=0;i<M.row;i++)
for(int j=0;j<M.col;j++)
{cout<<M[i][j];} //问题在这里:对于类型T,需要重载运算符<<
cout<<endl;
}
arong1234 2009-08-08
  • 打赏
  • 举报
回复
模板类的实现和普通类不一样,必须都放在头文件里
你看看vector自己的实现就知道了
内容概要:本文介绍了WiFiSupply斯普莱WFS7000XA工业级大功率双频无线AP基站,该设备支持2.4G/5GHz双频段,最大带宽达433Mbps,具备高发射功率(26dBm)、高接收灵敏度(-97dBm)和超远传输距离(可达1.5公里以上)。产品采用工业级设计,支持TDMA时分多址、私有协议、Fast Roaming快速漫游(切换延迟≤30ms)、抗干扰能力强,通信延迟低于1ms,支持主流PLC通信协议。设备支持胖瘦一体模式、多种供电方式(含POE)、IP54防护等级、-45~85℃宽温工作,适用于复杂电磁与恶劣环境。具备多重安全机制,如巨量安全隧道、VLAN、QoS、防火墙、MAC/IP过滤等,并支持SNMP、SSH、API对接及云平台集中管理,满足工业4.0、智慧物流、AGV/AMR小车、无人机遥控、车载视频传输等场景的无线组网需求。; 适合人群:从事工业自动化、物联网、智能制造、智慧物流等领域,具备一定网络与通信基础知识的技术人员及系统集成商。; 使用场景及目标:①用于AMR/AGV/RGV小车、穿梭车、天车等移动设备的无线联网与稳定通信;②实现室内外远距离无线桥接与覆盖,支持高速移动下的无缝漫游与低延迟数据传输;③构建高安全、高可靠的工业无线网络,支持PLC协议传输与远程集中管控。; 阅读建议:此文档侧重产品技术参数与工业应用场景,建议结合实际部署需求重点关注其抗干扰能力、漫游性能、供电方式与管理接口,便于在复杂工业环境中选型与集成。
内容概要:本文围绕基于序贯蒙特卡洛模拟法的配电网可靠性评估展开系统性研究,深入阐述了该方法在电力系统可靠性分析中的理论基础与技术优势。相较于非序贯方法,序贯蒙特卡洛通过引入时间序列模拟,能够精确刻画系统状态的时序演变过程与元件故障的动态特性,有效提升对复杂运行场景的模拟能力。研究建立了配电网中关键设备的故障模型与状态转移机制,采用时序仿真方法对系统运行状态进行抽样,并在此基础上统计计算系统平均停电频率(SAIFI)、系统平均停电持续时间(SAIDI)等核心可靠性指标。为验证方法的有效性与实用性,研究以标准IEEE测试系统为案例进行仿真分析,充分展示了该方法在处理多重故障、网络重构及复杂拓扑结构下的优越性能,并配套提供了完整的Matlab代码实现,增强了研究成果的可复现性与工程应用价值。; 适合人群:具备电力系统分析、概率统计基础知识以及一定Matlab编程能力的高校研究生、从事电力系统规划、运行与可靠性评估的科研人员及工程技术人员。; 使用场景及目标:①用于高等院校相关课程的教学演示与学生实践,深化对可靠性评估理论的理解;②为配电网规划、运维策略制定及升级改造提供科学、量化的决策支持工具;③支撑高水平学术论文的成果复现、方法改进与算法创新研究。; 阅读建议:此资源集理论推导、算法实现与仿真验证于一体,建议读者在掌握蒙特卡洛模拟基本原理的基础上,结合文档内容仔细研读并调试所提供的Matlab代码,通过调整系统参数、故障率等输入条件,观察其对SAIFI、SAIDI等输出指标的影响,从而深入理解状态抽样、时序模拟与可靠性指标统计等关键技术环节的实现细节与内在逻辑。

33,026

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧