c++类模板成员函数报错
2024-10-21 09:46:05
类模板成员函数要不就在类模板中实现,要不就和类模板写在同一个文件中。
否则然会出现下面错误:
>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];
}
}
最新文章
- apache+php 安装
- Docker-3:Data Volume
- C#中方法的参数的四种类型
- NYOJ:题目529 flip
- 【分享】4款WiFi广告营销利器推荐
- Linux磁盘分区与格式化
- Ruby Class
- [改善Java代码]不要只替换一个类
- Volley 百财帮封装
- paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
- mahout源码KMeansDriver分析之五CIMapper
- [转]于Fragment和Activity之间onCreateOptionsMenu的问题
- sharepreference使用教程
- Image Style Transfer:多风格 TensorFlow 实现
- Rails Migration Data Model栏位修改及数据类型介绍
- WPF 窗口居中 &; 变更触发机制
- lemon special judge模板
- 解析/proc/net/dev
- Mysql 和 SQLServer 使用SQL差异比较
- 尚硅谷springboot学习26-嵌入式servlet容器自动配置、启动原理