编写一个 header file 真是头疼啊!
在头文件中定义函数不容易啊!
cinvec.h 的目的详见我的博客 关于 C++中 输入多行不定数量数字 的思考。
cinvec.h 内容如下:
#ifndef CINVEC
#define CINVEC
#include <iostream>
#include <vector>
#include <string>
#include <sstream> // std::istringstream
std::vector<int> cinvec_int(std::string cin_int)
{
getline(std::cin, cin_int);
std::vector<int> vint;
std::istringstream is(cin_int);
int i;
while (is >> i)
vint.push_back(i);
return vint;
}
std::vector<double> cinvec_double(std::string cin_double)
{
getline(std::cin, cin_double);
std::vector<double> vdou;
std::istringstream is(cin_double);
double i;
while (is >> i)
vdou.push_back(i);
return vdou;
}
#endif // !CINVEC
一开始一直不能成功,原因在于定义的两个函数括号内的内容一直无法确定。一直想要直接通过输入,因而借鉴了 getline 的形式,使用 std::istream,然而header file 无问题,在 source file 处却又以下报错:
(std::cin) C++ function (declared at line 69 of) cannot be referenced – it is a deleted function
对此很是头疼。网上搜索(包括CSDN内搜索),却不能得到结果。
但是此时我将思路打开,并不需要像 getline 一样给 cin 专门一个位置。可以类似数学中常用的”设而不求“,设一个中间 string 参数,而该参数可在 header 中直接使用 getline 代换掉。由此思路形成。
注:
- 2020.8.28 花费一个多小时解决该问题,作博客以记之。
- 我编写的另一个头文件详见我的博客 【笔记】 C++中的进制 中进制的转换。