使用vs2015编辑c++模板程序报错2019

  笔者这几天在熟悉vs2015工具编辑c++,(从前用的都是vc++6.0)。发现还真是不容易使用,简单的一个小程序会报错一大堆你看不懂的问题。现将我发现的重要的一个问题呈现给大家。

  在使用类模板设计对象时,通常会使用友元函数提供对该类的内部私有成员数据访问,请看下面这段代码,定义了一个顺序表的基本运算

 1 template <typename T>
 2 class SqListClass { //顺序表类模板
 3     T * data;  //存放顺序表中的元素
 4     int length; //存放顺序表的长度
 5 public:
 6     SqListClass();  //构造初始化,分配存储空间,初始化表长度为0
 7     ~SqListClass();  //析构函数,释放分配空间
 8     void CreateList(T a[], int n);  //用给定的数组元素创建顺序表
 9     void DispList();   // 输出顺序表所有元素
10     int ListLength();  //获取顺序表长度
11     bool GetElem(int i, T &e); //求顺序表中某序号的元素值
12     int LocateElem(T e); //按元素值查找序号
13     bool ListInsert(int i, T e); //插入数据元素
14     bool ListDelete(int i); //删除数据元素
15
16     //其他函数算法实现
17     //template <typename T>
18     friend void Reserve(SqListClass<T> & L); //将顺序表元素逆置 例L={1,2,3,4}变为L={4,3,2,1}
19 //    template <typename T>
20     friend bool DeleteElem(SqListClass<T> & L,T e); //删除指定元素值
21 //    template <typename T>
22     friend void Merge2(SqListClass<T> & L1, SqListClass<T> & L2, SqListClass<T> &L3); //二路归并算法
23 };

  具体实现不列出来了,然后我在主函数中是这样调用的

 1 #include<iostream>
 2 #include "SqListClass.cpp"
 3 using namespace std;
 4 int main()
 5 {
 6     SqListClass<int> s1, s2;
 7     int a[4] = { 1,2,3,4 };
 8     s1.CreateList(a, 4);
 9
10     int b[3] = { 5,7,9 };
11     s2.CreateList(b, 3);
12
13     SqListClass<int> s3;
14     Merge2(s1, s2, s3);
15     s3.DispList();
16 }

在编译时会报错如下

解决方法:在定义模板类和模板函数时候,必须加上template <typename T>这一行语句

即:

①当定义模板类时,在类定义头文件(*.h)可以这样写

template <typename T>

class A{

//类体

};

在类实现(*.cpp)里面,每一个成员函数都要这样写

template <typename T>

返回值 A<T>::函数名(形参列表){

//函数体

}

②在模板类中要定义友元函数不免也是要定义模板函数的

此时需要注意,(*.h)头文件中模板友元函数的定义应该是

template <typename T>

friend 返回值 函数名(形参表);

(*.cpp)文件中模板友元类实现如下:

template <typename T>

返回值 函数名(形参表)

{

//函数体

}

这样就不会报错2019了。问题解决

同理,在设计模板友元类B时,不管是提前声明友元类B,还是在类A中定义友元模板类B,还是定义模板友元类B都不要忘记加上

template <typename T>

链接微软提供的报错2019 解决方法https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=ZH-CN&k=k(LNK2019)&rd=true

原文地址:https://www.cnblogs.com/gaochaochao/p/8387762.html

时间: 2024-09-30 14:29:47

使用vs2015编辑c++模板程序报错2019的相关文章

运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory -------------------------------------------------------------------------------------------------------------------------------------

winserver2003环境发布ASP程序报错(HTTP 错误 403.1 - 禁止访问:执行访问被拒绝)

问题: 在Windows Server 2003 + IIS6.0上布署.Net 2.0网站时发生如下错误: 该页无法显示 您试图从目录中执行 CGI.ISAPI 或其他可执行程序,但该目录不允许执行程序. -------------------------------------------------------------------------------- 请尝试以下操作: 如果您认为该目录应该允许执行访问权限,请与网站管理员联系. HTTP 错误 403.1 - 禁止访问:执行访问被

WinDbg抓取程序报错dump文件的方法

程序崩溃的两种主要现象: a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭 例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等 此种崩溃特点:程序已异常,在你未点出错窗口的确定或其他按,所有错误信息都还保留在PC的内存中,可以直接抓取Dump文件.当然,如果你知道 怎么样操作可以让程序崩溃,也可以用守株待兔的抓取方法抓Dump文件. b.程序在运行中的时候,窗口和进程突然消失,没有任何错误窗体 典型的现象:程序自动关闭 或者玩游戏时,游

SharePoint 2013 创建web应用程序报错&quot;This page can’t be displayed&quot;

错误描述 This page can't be displayed ?Make sure the web address http://centeradmin is correct. ?Look for the page with your search engine. ?Refresh the page in a few minutes. 发生过程 创建web应用程序,填写完基本信息以后点击确定,就是"这不会花费很长时间"的提示,然后就报错了,并且SharePoint和iis的日志中

程序报错:Probable fatal error:No fonts found.

今天,使用java写一个验证码,发布到linux服务器上,验证码不能正常显示, 程序报错:Probable fatal error:No fonts found. 经排查项目中使用了new Font("DIALOG", Font.PLAIN, fsize),即名称为"DIALOG"的字体. 解决方案:服务器上装载对应语言包支持 yum groupinstall chinese-support

用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 &lt;xml xmlns=&#39;&#39;&gt;

原因 一,类型错误: 比如xml本来是UserInfo类型 用XmlSerializer进行反序列化传入的类型是MemberInfo这就会报错 二,xml根节点和对象的类名不一致,而又没有对类加入[XmlRoot(Namespace = "",IsNullable = false,ElementName = "RequestResult")]限制 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>

keil 通过JTAG下载程序 报错:error: flash download failed - &quot;cortex-m3&quot;的解决方法

硬件环境: nxp lpc1788fbd208核心板 软件环境: keil uvision4 segger j-flash arm v4.50 其他: 芯片选择正确 jtag模式 现象:之前用JFlashARM.exe下载了程序,在没有擦除程序的情况下,JTAG模式下用keil下载程序 报错 error: flash download failed - "cortex-m3" 原因:用jFlashARM.exe下载程序后,没有擦除程序 解决:擦除lpc1788 上的程序,然后在keil

(g_jvm)-&gt;AttachCurrentThread(&amp;env, NULL) 后使用 (g_jvm)-&gt;DetachCurrentThread();程序报错

(g_jvm)->AttachCurrentThread(&env, NULL)  后使用 (g_jvm)->DetachCurrentThread();程序报错 ERROR: detaching thread with interp frames (count=13)   在java线程中不能使用AttachCurrentThread.DetachCurrentThread方法来获取JNIEnv.调用DetachCurrentThread函数的地方在java线程中,即在java调用C

Windows8 上面安装Oracle 11g 时,安装程序报错:[INS-13001]环境不满足最低要求

Oracle 11g 时,安装程序报错:[INS-13001]环境不满足最低要求,解决方法: 在安装文件的/stage/svu文件夹下面找到文件 cvu_prereq.xml文件,修改为如下(添加windows 8 相关字段): <?xml version="1.0"?> <HOST PLATID="912"> <SYSTEM> <MEMORY> <PHYSICAL_MEMORY VALUE="128&