如何使用istringstream从c ++中的字符串中读取双精度数

时间:2016-01-31 00:09:22

标签: c++ istringstream

我是编程c ++的新手。我正在尝试读取我从文件中读取的字符串中的75个双打。我正在尝试使用istringstream。

这是我到目前为止所做的: 头文件:

#ifndef READPOINTS_H_INCLUDE
#define READPOINTS_H_INCLUDE
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std::istringstream;
.....
istringstream linestr;

CPP文件:     #include

void ReadPoints::grabPoin(const string& read_line, vector<doubles> PointVector){

linestr(read_line);

for(int i = 0; i < 75; i++){

 linestr >> value

 pointVector.push_back(value);
 }
}

编译此代码时出现以下错误:

ReadPoints.cpp:在成员函数'bool ReadPoints :: grabPoint(const string&amp;,std :: vector&amp;)'中: ReadPoints.cpp:48:19:错误:调用'(std :: istringstream {aka std :: basic_istringstream})(const string&amp;)'不匹配   linestr(read_line);

任何人都可以解释什么是错的,为什么我得到不匹配的电话?

1 个答案:

答案 0 :(得分:0)

不要在标题中放置定义。目前,您已获得istringstream linestr;:将其放在一个* .cpp文件中,然后在您的标头中extern std::istringstream linestr(后者称为声明,与定义不同) 。但是,无论如何,这个字符串流最好在函数本身中定义。

将* .cpp中的linestr(read_line)替换为std::istringstream line_str{ read_line },并从头文件中删除这两行:using namespace std::istringstream;istringstream linestr;

您的代码现在应如下所示:

void ReadPoints::grabPoin(const string& read_line, vector<doubles> PointVector){

std::istringstream linestr{ read_line }; // if that doesn't work, use linestr(read_line) instead... note the () and {} have different meanings

for(int i = 0; i < 75; i++){

 linestr >> value

 pointVector.push_back(value);
 }
}

以下是其他一些提示:

  • 切勿在标题中放置using指令(即using namespace
  • 不惜一切代价避免使用指令。如果您不想输入std::istringstream,请将其放在* .cpp文件中(是​​的,每个都是)using std::istringstream
  • 如果必须使用using指令,则需要这样做:using namespace std;

这些都可以帮助您避免命名空间污染,这使得调用正确的函数变得困难。

相关问题