使用vs2015编辑c++模板程序报错2019
笔者这几天在熟悉vs2015工具编辑c++,(从前用的都是vc++6.0)。发现还真是不容易使用,简单的一个小程序会报错一大堆你看不懂的问题。现将我发现的重要的一个问题呈现给大家。
在使用类模板设计对象时,通常会使用友元函数提供对该类的内部私有成员数据访问,请看下面这段代码,定义了一个顺序表的基本运算
- template <typename T>
- class SqListClass { //顺序表类模板
- T * data; //存放顺序表中的元素
- int length; //存放顺序表的长度
- public:
- SqListClass(); //构造初始化,分配存储空间,初始化表长度为0
- ~SqListClass(); //析构函数,释放分配空间
- void CreateList(T a[], int n); //用给定的数组元素创建顺序表
- void DispList(); // 输出顺序表所有元素
- int ListLength(); //获取顺序表长度
- bool GetElem(int i, T &e); //求顺序表中某序号的元素值
- int LocateElem(T e); //按元素值查找序号
- bool ListInsert(int i, T e); //插入数据元素
- bool ListDelete(int i); //删除数据元素
- //其他函数算法实现
- //template <typename T>
- friend void Reserve(SqListClass<T> & L); //将顺序表元素逆置 例L={1,2,3,4}变为L={4,3,2,1}
- // template <typename T>
- friend bool DeleteElem(SqListClass<T> & L,T e); //删除指定元素值
- // template <typename T>
- friend void Merge2(SqListClass<T> & L1, SqListClass<T> & L2, SqListClass<T> &L3); //二路归并算法
- };
具体实现不列出来了,然后我在主函数中是这样调用的
- #include<iostream>
- #include "SqListClass.cpp"
- using namespace std;
- int main()
- {
- SqListClass<int> s1, s2;
- int a[] = { ,,, };
- s1.CreateList(a, );
- int b[] = { ,, };
- s2.CreateList(b, );
- SqListClass<int> s3;
- Merge2(s1, s2, s3);
- s3.DispList();
- }
在编译时会报错如下
解决方法:在定义模板类和模板函数时候,必须加上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
使用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 f ...
- Window7中Eclipse运行MapReduce程序报错的问题
按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程 ...
- eclipse运行hadoop程序报错:Connection refused: no further information
eclipse运行hadoop程序报错:Connection refused: no further information log4j:WARN No appenders could be foun ...
- WinDbg抓取程序报错dump文件的方法
程序崩溃的两种主要现象: a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭 例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等 此种崩溃特点 ...
- 记录微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function
微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function 这个报错是在将数组对象通过 ...
- 小程序-报错 xxx is not defined (已解决)
小程序-报错 xxx is not defined (已解决) 问题情境: 这样一段代码,微信的小程序报错 is not defined 我 wxml 想这样调用 //wxml 代码 <view ...
- debug运行java程序报错
debug运行java程序报错 ERROR: transport error 202: connect failed: Connection timed out ERROR: JDWP Transpo ...
- MVC 中dapper的日志功能+程序报错修改
由于之前的项目说最好要有日志功能,正好之前看过几篇这方面的文章就弄了点东西. 这是EF日志受启发很大的一个原文: http://www.cnblogs.com/GuZhenYin/p/5556732. ...
- 发送邮件程序报错454 Authentication failed以及POP3和SMTP简介
一.发现问题 在测试邮件发送程序的时候,发送给自己的QQ邮箱,程序报错454 Authentication failed, please open smtp flag first. 二.解决问题 进入 ...
随机推荐
- Android listview与adapter用法(BaseAdapter + getView)
Android listview与adapter用法http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html package ...
- std::function 使用_
#include <iostream> #include <functional> //函数指针写法 typedef int(*FuncPoint)(const int& ...
- 802.11 ------ Beacon帧、Beacon Interval、TBTT、Listen Interval、TIM、DTIM
Beacon帧:Beacon的实际发送一般都是采用最低速率的,其包含两个原因,1)beacon帧是一个广播帧,其没有ACK反馈,所以无法设置重传机制,2)beacon帧目的是广播AP的基本信息,所以希 ...
- qq接入
「花与剑: https://blog.csdn.net/wbbott/article/details/53107009」—————————
- Go_20: Golang 中 time 包的使用
time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1. 时间常量(时间格式化) const ( ANSIC = "Mon Jan _2 15:04:05 2006" ...
- python操作mongo脚本
#!/usr/bin/python# -*- coding: utf-8 -*- import sysimport osimport jsonfrom pymongo import MongoClie ...
- Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新
登陆时splash初始页调用接口检查app版本.如有更新,使用okGo的文件下载,保存到指定位置,调用Android安装apk. <!-- Android 8.0 (Android O)为了针对 ...
- 为了拿Ph.D而做出的诺贝尔奖
- 悲催的IE6 七宗罪大吐槽(带解决方法)第一部分
一.奇数宽高 悲剧的IE6啊,为何有如此多bug,但用户市场又那么大,真让我们搞网站的纠结.今天就遇到了一个非常奇怪但又很细节的一个bug,一个外部的相对定位div,内部一个绝对定位的div(righ ...
- Richard Stallman:让我们关注和尊敬自由软件教父
1953年,Richard Stallman生于美国纽约曼哈顿区.在度过了并不快乐的童年之后,他在哈佛大学找到了自己的家.在MIT人工智能实验室工作期间,展露出了自己的计算 机天赋.对他来说,开发操作 ...