笔者这几天在熟悉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的更多相关文章

  1. 运行编译后的程序报错 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 ...

  2. Window7中Eclipse运行MapReduce程序报错的问题

    按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程 ...

  3. eclipse运行hadoop程序报错:Connection refused: no further information

    eclipse运行hadoop程序报错:Connection refused: no further information log4j:WARN No appenders could be foun ...

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

    程序崩溃的两种主要现象: a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭 例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等 此种崩溃特点 ...

  5. 记录微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function

    微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function 这个报错是在将数组对象通过 ...

  6. 小程序-报错 xxx is not defined (已解决)

    小程序-报错 xxx is not defined (已解决) 问题情境: 这样一段代码,微信的小程序报错 is not defined 我 wxml 想这样调用 //wxml 代码 <view ...

  7. debug运行java程序报错

    debug运行java程序报错 ERROR: transport error 202: connect failed: Connection timed out ERROR: JDWP Transpo ...

  8. MVC 中dapper的日志功能+程序报错修改

    由于之前的项目说最好要有日志功能,正好之前看过几篇这方面的文章就弄了点东西. 这是EF日志受启发很大的一个原文: http://www.cnblogs.com/GuZhenYin/p/5556732. ...

  9. 发送邮件程序报错454 Authentication failed以及POP3和SMTP简介

    一.发现问题 在测试邮件发送程序的时候,发送给自己的QQ邮箱,程序报错454 Authentication failed, please open smtp flag first. 二.解决问题 进入 ...

随机推荐

  1. 安装配置openstack-dashboard(horizon)

    这里把dashboard安装在controller节点上. 1.安装程序包 # yum install -y openstack-dashboard 2.修改配置文件 # vim /etc/opens ...

  2. [POI2015]WIL-Wilcze doły

    题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式: 第一行包含三个整数 ...

  3. js子节点children和childnodes的用法

    想要获取子节点的数量,有几种办法. childNodes 它会把空的文本节点当成节点, <ul> 文本节点 <li>元素节点</li> 文本节点 <li> ...

  4. mysql 优化总结

    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. (laravel 可以使用 debugbar 包,可以及时发现低效 sql 语句,不使用索 ...

  5. php 通过链接生成二维码,扫码支付用到

    $(".good_info").on('click',function () { var id = $(this).data('id'); var string='http://q ...

  6. Java 9 新特性快速预览

    原文出处:wangwenjun69 Java 8 已经出来三年多的时间了,原本计划2016年七月份release Java 9,但是基于种种原因,Java 9 被推迟到了2017年的3月份,本人也在O ...

  7. 遗传算法入门C1

    遗传算法入门C1 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 遗传算法历史 遗传算法(GA)是从生物进化的角度考虑提出来的方法,19世纪达尔文在大量观察基础上总结了大自然进化规律 ...

  8. Spring Resource 类图

    插播个广告 老丈人家的粉皮儿,农产品,没有乱七八糟的添加剂,欢迎惠顾 

  9. myeclipse使用小结

    1.项目设置编码格式 (1)全局编码设置:编码设置的方法:ToolBar-->Window-->Preferences-->General-->Workspace-->T ...

  10. A Gentle Guide to Machine Learning

    A Gentle Guide to Machine Learning Machine Learning is a subfield within Artificial Intelligence tha ...