c++类模板成员函数报错
类模板成员函数要不就在类模板中实现,要不就和类模板写在同一个文件中。
否则然会出现下面错误:
>main.obj : error LNK2019: 无法解析的外部符号 "public: int __thiscall vec<int>::pop_back(void)" (?pop_back@?$vec@H@@QAEHXZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall vec<int>::push_back(int)" (?push_back@?$vec@H@@QAEXH@Z),该符号在函数 _main 中被引用
示例如下:
main.cpp
#include <iostream>
#include "vec.h"
using namespace std; int main()
{
vec<int> s;
s.push_back();
s.push_back();
s.push_back();
s.push_back();
s.push_back(); try
{
while ()
cout<<s.pop_back()<<endl;
}
catch (const runtime_error &e)
{
cerr<<e.what()<<endl;
} system("pause");
}
vec.h
#pragma once
template<class T>
class vec
{
public: vec()
:vect(new T[capacity]),
capacity(),
size(){};
~vec()
{
delete[] vect;
} int capacity;
int size;
T *vect; void push_back(T t);
T pop_back(); }; template<class T>
void vec<T>::push_back(T t)
{
if(size==capacity)
{
capacity=capacity*;
T *tmp_vec=new T[capacity];
for(int i=;i<size;i++) //我想这里一个个复制并不理想,做个数据结构,用指针连接也许更好
tmp_vec[i]=vect[i]; //不过用指针连接,速度上去了,运行空间也变大了
delete[] vect;
vect=tmp_vec;
}
vect[size]=t;
size++;
} template<class T>
T vec<T>::pop_back()
{
if(size==)
throw std::runtime_error("vect is empty");
else
{
size--;
return vect[size];
}
}
c++类模板成员函数报错的更多相关文章
- C++ - 模板类模板成员函数(member function template)隐式处理(implicit)变化
模板类模板成员函数(member function template)隐式处理(implicit)变化 本文地址: http://blog.csdn.net/caroline_wendy/articl ...
- 类模板成员函数默认值问题:an out-of-line definition of a member of a class template cannot have default arguments
template <typename T> class A { ); }; template<typename T> ) { /* */ } 对于类似上文代码,VS编译器会报 ...
- c++函数模板作为类的成员函数,编译报错LNK2019的解决方法
为了使某个类的成员函数能对不同的参数进行相同的处理,需要用到函数模板,即template<typename T> void Function(). 编译时报错LNK2019 解决方法: 1 ...
- C++ 11 线程调用类的成员函数解决办法
在C++中,_beginthreadex 创建线程是很麻烦的.要求入口函数必须是类的静态函数. 通常,可以采用thunk,或者模板来实现. 因C++ 11中引入了 std::async ,可以很好的解 ...
- C++ socket bind()函数报错 不存在从 "std::_Binder<std::_Unforced, SOCKET &, sockaddr *&, size_t &>" 到 "int" 的适当转换函数
昨天还可以正常运行的程序,怎么今天改了程序的结构就报错了呢?我明明没有改动函数内部啊!!! 内心无数只“草泥马”在奔腾,这可咋办呢?于是乎,小寅开始求助于亲爱的度娘...... 由于小寅知识水平有限, ...
- [转载]能不能同时用static和const修饰类的成员函数?
题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量).请问:能不能同时用static和con ...
- (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下: class D { public: void printA() { cout<<"printA"< ...
- C++类的成员函数使用的一些小总结
From: http://blog.csdn.net/xiayefanxing/article/details/7607506 这一阵做项目代码开发的时候,用到了在一个C++文件中使用另一个类的成员函 ...
- linux下启动dbca或netmgr类的图形界面报错解决
linux下启动dbca或netmgr类的图形界面报错解决 Xlib: connection to ":0.0" refused by server Xlib: No pro ...
随机推荐
- excel文件的groovy脚本在SoapUI中进行数据驱动测试
SoapUI Pro具有从外部文件读取数据的功能,例如:excel,csv等.但SoapUI不提供从excel文件读取数据的功能.因此,为了从SoapUI中的excel文件中读取数据,我们需要在gro ...
- Python之逻辑运算符
这一小节我在动笔之前犹豫到底要不要动手写,虽然简单但是防止遗忘,博主还是决定记录一下.Python中运算符主要分为算术运算符,赋值运算符,比较运算符,逻辑运算符以及成员运算符.下面详细记录这5种运算符 ...
- BZOJ 2935/ Poi 1999 原始生物
[bzoj2935][Poi1999]原始生物 2935: [Poi1999]原始生物 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 145 So ...
- 浅谈C#数组(一)
如果需要使用同一类型的多个对象,可以使用数组和集合(后面介绍).C#用特殊的记号声明,初始化和使用数组.Array类在后台发挥作用,它为数组中的元素排序和过滤提供了多个方法.使用枚举器,可以迭代数组中 ...
- java 并发完成任务之CountDownLatch
1.CountDownLatch是一个同步辅助类,犹如倒计时计数器,创建对象时通过构造方法设置初始值,调用CountDownLatch对象的await()方法则处于等待状态,调用countDown() ...
- properties 资源文件读取
1. 在source中添加资源文件 resource.properties #FTP 相关配置 #FTP 的ip地址 FTP_ADDRESS=192.168.88.142 FTP_PORT=21 ...
- PostgreSQL精简命令:
dos命令行连接PostgreSQL: . 接入PostgreSQL数据库: psql -h IP地址 -p 端口 -U 用户名 -d 数据库名 . 输入数据库密码 C:\Users\admin\De ...
- 小问题总结:鼠标点击到输入框(input)里的时候,输入框的提示消失,鼠标再移开,输入框提示出现
问题如标题: 鼠标点击到输入框(input)里的时候,输入框的提示消失,鼠标再移开,输入框提示出现.如图所示: 做法如下: <input type="text" name ...
- 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表
1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...
- Win32窗口创建过程
编写窗口程序的步骤: 1 定义WinMain函数 2 定义窗口处理函数–自己定义处理消息 3 注册窗口类(往OS写入数据) 4 创建窗口 (在内存中创建窗口) 5 显示窗 ...