笔者这几天在熟悉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. 解题:NOI 1999 生日蛋糕

    题面 裸的搜索题,就说剪枝(注:nw->noww->当前,res->rest->剩余): 1.想达到$Nπ$的体积,那么半径一开始最多也就$sqrt(n)$了,再大就超了... ...

  2. BZOJ 4802 欧拉函数

    4802: 欧拉函数 Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sample Input 8 Sample Outp ...

  3. [VS2012] 无法查找或打开 PDB 文件

    http://www.cnblogs.com/southernduck/archive/2012/11/23/2784966.html 用VS2012调试一个控制台程序的时候,出现一下提示信息: “w ...

  4. Fibonacci数列时间复杂度之美妙

    Fibonacci数列: fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2) 上课老师出了一道题,求下列函数的时间复杂度: int fib(int d) { ) ; ...

  5. zuul学习

    1.zuul可以代理界面所需的后端服务,可以解决CORS(Cross-Origion-Resource-Sharing)和认证问题(authentication)问题 2.zuul是使用ribbon来 ...

  6. [Linux]-Linux常用命令之文件解压

    不压缩方式压缩的文件需要不同的命令来解压缩,下面是Linux的各种文件解压命令. 对于.tar结尾的文件: tar -xf 对于.gz结尾的文件 : gzip -d all.gz gunzip all ...

  7. bzoj千题计划106:bzoj1014 [JSOI2008]火星人prefix

    http://www.lydsy.com/JudgeOnline/problem.php?id=1014 两个后缀的最长公共前缀:二分+hash 带修改带插入:splay维护 #include< ...

  8. 51nod 1534 棋子游戏

    1534 棋子游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 http://www.51nod.com/onlineJudg ...

  9. [Luogu 3128] USACO15DEC Max Flow

    [Luogu 3128] USACO15DEC Max Flow 最近跟 LCA 干上了- 树剖好啊,我再也不想写倍增了. 以及似乎成功转成了空格选手 qwq. 对于每两个点 S and T,求一下 ...

  10. [译]Quartz.NET 框架 教程(中文版)2.2.x 之第五课 SimpleTrigger

    第五课 SimpleTrigger 如果你需要在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务,SimpleTrigger应该能满足你的调度需求.例如,你希望触发器在2015年 ...