我是编程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);
任何人都可以解释什么是错的,为什么我得到不匹配的电话?
答案 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 namespace
)std::istringstream
,请将其放在* .cpp文件中(是的,每个都是)using std::istringstream
。using namespace std;
。这些都可以帮助您避免命名空间污染,这使得调用正确的函数变得困难。