- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在努力解决与 ifstreams 相关的编译器错误,非常感谢任何帮助!提前致谢!
我的代码如下:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const char EOS = '#';
bool end_of_sequence (ifstream &file)
{
//Pre: EOS has not been read.
//Post: whether or not the next character to read is EOS, in which case it is read.
char test = file.get();
bool ii_EOS = (test == EOS);
if (!ii_EOS) file.unget();
return ii_EOS;
}
bool is_it_letter (char value_to_test)
{
//Pre: value_to_test is an English character.
//Post: whether or not value_to_test is a letter.
return ((value_to_test >= 'a' && value_to_test <= 'z') || (value_to_test >= 'A' && value_to_test <= 'Z') || value_to_test == '·');
}
bool test_word (ifstream &file, char undesired)
{
//Pre: file hasn't reached eof and is ready for a word to be read.
//Post: whether or not [not (the first letter of the next word is undesired)].
char first_letter = file.get();
bool test = (first_letter != undesired && is_it_letter(first_letter));
file.unget();
return (!test); //I later found out test shouldn't be denied.
}
void print_spaces (ifstream &file)
{
//Pre: true.
//Post: has read all the next non-letters in file and printed them onscreen.
char current_space = ' ';
while (!is_it_letter(current_space) && !end_of_sequence(file))
{
file.get(current_space);
if (!is_it_letter(current_space) && current_space != EOS) cout << current_space;
}
file.unget();
}
void print_word (ifstream &file, bool printable)
{
//Pre: true.
//Post: if file has a word ready to be read, it is read. It is also printed onscreen if printable is true.
char current_letter = file.get();
while (is_it_letter(current_letter))
{
if (printable) cout << current_letter;
file.get(current_letter);
}
file.unget();
}
int main ()
{
//Declarations.
string input;
char undesired;
//Input.
cout << "INTRODUEIX EL NOM DEL FITXER:" << endl;
cin >> input;
ifstream mainfile(input.c_str());
if (!mainfile.is_open())
{
cout << "NO HEM TROBAT EL FITXER." << endl;
return 1;
}
cout << "INTRODUEIX UN CARACTER:" << endl;
cin >> undesired;
//Comput + output.
cout << "TEXT RESULTANT D'ELIMINAR LES PARAULES QUE COMENCEN PER " << undesired << ":" << endl;
while (!end_of_sequence(mainfile))
{
print_word(mainfile, test_word(mainfile,undesired));
print_spaces(mainfile);
}
return 0;
}
我遇到此错误的函数调用是:
print_word(mainfile, test_word(undesired));
(错误:从类型为“char”的表达式中对类型为“std::ifstream& {aka std::basic_ifstream&}”的引用的初始化无效|)
在相关的情况下,程序本身旨在在屏幕上打印从文件中读取的句子(序列的非物理结尾,即“#”)跳过以先前输入的字母开头的单词。
由于上述错误,它无法编译。这可能是一个非常愚蠢的错误,我在编程方面仍然很新。非常感谢!
编辑。我还意识到(在我运行它之后)根据程序的目的不应该拒绝返回 test_word。我整个晚上都写完了,我知道它会有一些愚蠢的错误。对不起!
最佳答案
我认为没有足够的信息可以确定,因为我不知道mainfile
和undesired
是什么。但是,test_word
需要两个参数,而您只传递了一个。 (然而,在我们看不到的头文件中可能指定了默认参数)。
关于c++ - 作为引用传递时 istream 的无效初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47603476/
我正在尝试弄清楚如何让一个成员变量代表传入的 istream 或类自己创建的成员变量。 我认为,如果我动态分配类创建的 istream,那么使用指向 istream 的指针可能会起作用;然而,问题在于
我正在尝试理解这段代码 istream &read(istream &is, Sales_data &item) { double price = 0; is >> item.b
我编写了一个实现 IStream(COM 接口(interface)而不是 C++ 标准库类)的过滤器。这一切都很好,但我的问题是我不确定何时(如果有的话)我可以确定不会发送进一步的 IStream
我正在测试 C++PL 书中的一段代码并找到了下一段代码(我不想感觉我是在将它从书中复制粘贴到我的 IDE,所以我至少改变了变量名): istream& operator>> (istream& is
我正在阅读 C++ Practical Programming by Example by Andrew Koenig (Author)并在 4.1.3 Reading homework grades
我正在尝试使用 istream& getline 而不是使用 istream& operator 从文件中读取行。 结果cpp #include "Result.h" Result::Result()
我试图通过套接字连接发送图像,但我遇到了以下代码的问题: //stream to char array STATSTG myStreamStats; ULONG bytesSaved; myStrea
这里有两段代码,我起初认为它们应该是等价的: { std::ifstream stream("test.bin", std::ios_base::in | std::ios_base::bin
我在网上查了,但没找到合适的。 怎么可能有这样的主线(原始主线): int main() { Image left; std::ifstream ifs("l
假设我有以下代码: std::ifstream file(name, flags); file.seekg(0, std::ios::beg); // Check for error file.rea
在 Windows 上的 C++ 中,是否有任何简单的方法可以为现有 std::stream 对象创建 (COM) IStream 接口(interface)? 一个示例是使用 IWICStream:
考虑以下简单程序,它将输入拆分为空白并每行打印出一个非空白标记: #include int main(int argc, char* argv[]) { while (std::ci
istream& getline (istream& is, string& str); 此处 str 在换行符后终止。但是,如果我想处理 str cotents 2-3 行的情况,那么还有什么选择呢
这个问题已经有答案了: Java multiple file transfer over socket (3 个回答) 已关闭 5 年前。 我正在编写一个程序在两台计算机之间传输文件,但我没有关闭套接
void transferData(ifstream& input_file, ofstream& output_file) { char ch; while (input_file
我正在读取包含以下行的文本文件: deltaT 0.005; 在字符串中找到正确的行后,我想使用如下代码读出该值: double deltaT;
我正在查看 istream 类,但没有看到可以完全清除缓冲区并将输入设置为为下一个“干净”输入做好准备的方法。 我为我的类定义了提取运算符,在我的主程序中我要求用户输入,如下所示: while (tr
我正在编写一个解析器,之前我在尝试解析标识符(任何对 C++ 变量名有效的东西)和未闭合的字符串文字(任何以 " 开头的东西)时遇到了麻烦,但是在我的输入末尾缺少结束符 ")。我认为这是因为词法分析器
我得到了一个具有以下签名的函数。我无法改变它,我必须接受它。 void parse(std::istream & in); 我应该测试这个函数,所以基本上用预定义的内容调用它并检查值是否被正确解析。因
我的运算符(operator)有问题>> istream& operator>> (istream& is, Matrix& M) { char first; is>>first;
我是一名优秀的程序员,十分优秀!