下面的类接受用户的string
行作为输入。我的目标是将其存储在istringstream iss
中,然后将istringstream iss
中的各种数据提取到各种变量中。但是,当我试图用string user_input
初始化iss
时,我在编译文件时遇到了这个错误
错误C2064:术语的计算结果不是采用1个参数的函数
我认为问题出在iss{user_input};
行。请解释我出现此错误的原因。
_input.h
头文件
#pragma once
#include <string>
#include<sstream>
#include "_date.h"
#include "_time.h"
using namespace std;
//definition of class input
class _input
{
string user_input;
istringstream iss;
//datamembers to be sent
int esno,eday, emonth, eihours, eimins, eohours, eomins, emo;
char eiap, eoap;
string enotes;
public:
_input();
void get_input();
void process_data();
};
_input.cpp
文件
#include "_input.h"
_input::_input() : user_input { "Nothing Entered" }, iss{ "" }, esno{ 0 }, eday{ 0 }, emonth{ 0 },
eihours{ 0 }, eimins{ 0 }, eohours{ 0 }, eomins{ 0 }, emo{ 0 }, eiap{ 'n' }, eoap{ 'n' }, enotes{ "" }
{
}
void _input::get_input() // to store in iss
{
cout << "Enter the entry : Format (Date - In Time - Out Time - Money Owed - Notes)" << endl;
getline(cin, user_input);
iss{user_input}; //THIS IS WHERE I GET THE ERROR
}
void _input::process_data()
{
iss >> eday >> emonth >> eihours >> eimins >> eiap >> eohours >> eomins >> eoap >> emo >> enotes;
++esno;
}
简短的版本是您不能初始化一个对象两次。iss
被声明和构造为类的私有成员。当您尝试iss{user_input}
时,它已经存在——这是不允许的。您不需要初始化,只需将iss
的内容替换为user_input
中的内容即可。为此,您使用std::basic_istringstream::str。成员函数str
允许您获取或设置istringstream
的内容。
一个简短的例子:
#include <iostream>
#include <sstream>
#include <string>
int main (void) {
std::istringstream iss {}; /* iss is declared/constructed */
std::string s {};
std::cout << "enter s: ";
if (!getline(std::cin, s))
return 1;
iss.str(s); /* replace iss content with s */
std::cout << "iss has: "<< iss.str() << 'n'; /* check iss contains s */
while (iss >> s) /* read each string in iss */
std::cout << s << 'n'; /* output string */
}
示例使用/输出
$ ./bin/iss
enter s: my dog has fleas
iss has: my dog has fleas
my
dog
has
fleas
另外一个提示,看看为什么"使用命名空间std;"被认为是不好的做法?。
仔细看看,如果你还有问题,请告诉我。
iss{user_input}; //THIS IS WHERE I GET THE ERROR
语法表明,在get_input
中重新构造iss
为时已晚(而且是非法的(。相反,流必须用新的user_input
重新/初始化。
iss.clear();
iss.str(user_input);