Member 13479017 Ответов: 2

Может ли кто-нибудь помочь объяснить ошибки, которые я получаю в этом коде?


Цель этой программы-взять файл и попросить пользователя ввести существительные, глаголы и т. д., Чтобы заполнить предложение. Новые результаты будут сохранены во втором файле. Я постоянно получаю следующие ошибки:

prog5B.cpp: в функции ‘int openInfile()’:
prog5B.cpp:47: ошибка: ожидаемый инициализатор перед токеном ‘.’
prog5B.cpp:48: error: ‘ins’ не был объявлен в этой области
prog5B.cpp: в функции ‘void openOutfile()’:
prog5B.cpp:72: ошибка: ожидаемый инициализатор перед токеном ‘.’

Спасибо всем, кто может мне помочь!

/* 	Program:		prog5B.cpp
	By:				Mackenzie Ritter
	Last Modified:	Nov 23, 2017
	Purpose:		To produce a filled out madlibs with users help.
	Notes:
*/
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>

using namespace std ;

int openInfile () ;
void openOutfile () ;
void change (string&, string&) ;

int main ()
{
	string line, word, diffLine ;
	ifstream ins ;		//ins is an input stream
	ofstream outs ;		// outs is an output stream
	openInfile () ;
	openOutfile () ;
	change (word, diffLine) ;
	while (getline(ins, line))
	{
		outs << line << endl ;
	}
	ins.close () ;
	outs.close () ;
}

/*	Function:		openInfile
	Last Modified:	Nov 23, 2017
	Purpose:		Opens the input file after getting file name from user.
	In Parameters:	None
	Out Parameters:	string fileName
	Return Value:	None
*/

int openInfile ()
{
	string fileName ;
	cout << "Enter file of madlips outline." << endl ;
	cin >> fileName ;
	ifstream ins.open(fileName) ;		//connects ins to file inFile
	if (ins.fail (fileName))
	{
		cerr << "Error: Unable to open file : FILENAME" << endl ;
	return -1 ;		//return if failure
	}
	else
	{
		openOutfile () ;
	}
}

/*	Function:		openOutfile
	Last Modified:	Nov 23, 2017
	Purpose:		Opens the output file after getting file name from user.
	In Parameters:	None
	Out Parameters:	string copyFile
	Return Value:	None
*/

void openOutfile ()
{
	string copyFile ;
	cout << "Enter name of file for updated data." << endl ;
	cin >> copyFile ;
	ofstream outs.open(copyFile) ;
}

/*	Function:		change
	Last Modified:	Nov 23, 2017
	Purpose:		Replaces blanks with words from user.
	In Parameters:	string word, diffLine
	Out Parameters:	string fileName
	Return Value:	None
*/

void change (string&word, string&diffLine)
{
	string searchN = "blank-N" ;
	string searchA = "blank-A" ;
	string searchV = "blank-V" ;
	string searchP = "blank-P" ;
	string searchD = "blank-D" ;
	string noun, adjective, verb, place, adverb ;
	if (word == searchN)
	{
		cout << "Enter a noun." << endl ;
		cin >> noun ;
		noun = searchN ;
	}
	else if (word == searchA)
	{
		cout << "Enter an adjective." << endl ;
		cin >> adjective ;
		adjective = searchA ;
	}
	else if (word == searchV)
	{
		cout << "Enter a verb." << endl ;
		cin >> verb ;
		verb = searchV ;
	}
	else if (word == searchP)
	{
		cout << "Enter a place." << endl ;
		cin >> place ;
		place = searchP ;
	}
	else if (word == searchD)
	{
		cout << "Enter an adverb." << endl ;
		cin >> adverb ;
		adverb = searchD ;
	}
	else 
	{
		word = word ;
	}
}


Что я уже пробовал:

Я много раз корректировал программу в отношении входов и выходов.

2 Ответов

Рейтинг:
7

Richard MacCutchan

ifstream ins.open(fileName) ;       //connects ins to file inFile

Вы не можете создать экземпляр объекта и вызвать один из его методов в одной строке, как описано выше. Так и должно быть:
ifstream ins;       // create the stream object
ins.open(fileName) ;    // connects ins to file fileName

Тот же вопрос в OpenOutFile.

Существует ряд других проблем с вашим кодом. Вы создаете несколько переменных в своем основном методе, но никогда не инициализируете их никакими значениями, поэтому ваш код просто случайно завершится неудачей. Я бы посоветовал изучить ваши записи более подробно.


CPallini

5.

Рейтинг:
1

«_Superman_»

То ins и outs переменные являются локальными и доступны только в той функции, в которой они объявлены.
Вы можете объявить переменные в main и передайте переменные функциям в качестве параметров -

ifstream ins;    //ins is an input stream
ofstream outs;         // outs is an output stream
openInfile(ins);
openOutfile(outs);

int openInfile(ifstream& ins) { ... }
int openOutfile(ofstream& outs) { ... }