[comp.lang.c++] getting an istream to hang around

fontenot@rice.edu (Dwayne J. Fontenot) (09/16/89)

Hello. I am having a problem with keyboard I/O in C++.

System:
	GNU g++ version 1.34
	Sun 3/280

My problem is this: 
	I am implementing three functions which are members of
	the class `Command`. The first function, Command::GetCmd
	prints the prompt and reads a line of input into a
	character array called buf (char buf[MaxLine];). Then
	GetCmd needs to read the first character of the array and
	return some value based on what this character is. This
	works really well with the lines:

	cin.get(buf, MaxLine, `\n`);
	istream cmdStream(MaxLine, buf);
	cmdStream >> cmdChar; // where cmdChar is char cmdChar;

	Now the problem. I need the istream cmdStream to hang
	around after Command::GetCmd returns. I need to be able
	to call two other functions GetInt and GetString which
	operate on the same istream. I have tried various things
	to get CmdStream to hang around; declaring it as a
	private class data object, declaring it as static to
	GetCmd, and allocating it with `new`. I must be doing
	something wrong. When I try 

	istream* CmdStream = new istream(MaxLine, buf);

	the compiler tells me "too few parameters to
	constructor".

	Any help on this problem would b greatly appreciated.
	Note that I have to structure to functions this way
	because this is for a class and the function headers have
	been declared for us. Note also that I am not `using the
	Net to do my homework` because I have spent approx. 20
	hours on this problem already and neither my prof nor the
	labbies know C++ (this is the first year the prof has
	taught it and most of the labbies have not used the
	language before).

	If you are interested, code follows:


// This file contains routines responsible for accepting and processing
// the user's commands.

#include <stream.h>
#include <File.h>
#include "Command.h"

Cmd Command::GetCmd(char *prompt)
{
        char cmdChar;
	char* buf = new char[MaxLine];
	cout << prompt;
	cin.get(buf, MaxLine, '\n');
	istream cmdStream = new istream(MaxLine, buf);
	if((istream)cmdStream >> cmdChar) return(SomeCmd);
	return(BadCmd);
}

int Command::GetInteger(int& value)
{
	if(*streamPtr >> value) return(TRUE);
	value = 0; return(FALSE);
}

int Command::GetString(char *value)
{
	if(cmdStream >> value) return(TRUE);
	value = "\0"; return(FALSE);
}

main()
{
        Command myCommand;
	Cmd myCmd;
	char myString[MaxLine] = "default";

	cout << "main: " << myCommand.GetCmd("minimal prompt: ") << "\n";

	cout << "string: " << myCommand.GetString(myString) << myString << "\n";
}