笔者这几天在熟悉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. redis动态扩展内存

    需求:将redis内存从1G扩展到3G,不中断服务 1.打开客户端 # redis-cli -p 6391 2.查看当前值 redis 127.0.0.1:6391> config get ma ...

  2. E - Down or Right Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)

    http://codeforces.com/contest/1023/problem/E 交互题 #include <cstdio> #include <cstdlib> #i ...

  3. Redis3未授权访问漏洞导致服务器被入侵

    今天在腾讯云上搭的开发环境里的一台机器cpu load飚升老高,然后还能登陆上去,top后发现两个可疑进程./root/目录下有修改过的文件./opt目录被干掉了, 后经分析,这台机器上有redis外 ...

  4. GeoDa计算全局Moran‘I

    GeoDa计算全局Moran‘I 1.导入包含数据的.shp文件 2.创建权重矩阵,点击Weight Manger,再点击Create, weights file ID variable(其中包含的数 ...

  5. python文件加入python环境变量

    在python中,把一个python文件加入到python环境变量中,以方便其他python文件调用. 方式一: import sys sys.path.append(r'E:\syz\ly-code ...

  6. Ansible lineinfile模块详解

    目录 简介 修改匹配行 在匹配行前或后添加内容 在匹配行前添加 在匹配行后添加 修改文件内容及权限 删除一行内容 文件存在则添加一行内容 如果有匹配的行则修改该行,如果不匹配则添加 参数backref ...

  7. Matlab修改背景颜色

    步骤: 1, 在matlab命令行中运行prefdir, 获取matlab.prf文件所在路径 2, 打开matlab.prf所在路径, 找到matlab.prf文件, 作备份 3, 将以下内容添加到 ...

  8. KVM基本实现原理

    KVM 虚拟化技术概述 http://blog.csdn.net/yearn520/article/details/6461047 KVM 虚拟化技术在 AMD 平台上的实现 1.http://www ...

  9. 关于720p和1080p观看距离和效果

    分类: 不同分辩率的信号源,对观看距离的要求是不同的.在标清时代,看电视台的画面,要离得好鬼远,否则就会觉得画面粗糙闪炼唔舒服.720P及1080P的观看距离又应该点样呢?系唔系买个50寸的平板电视要 ...

  10. 《Science》:对年轻科学家的忠告