I do not understand why my compiler is saying:
type specifier omitted for parameter
FULL COMPILE ERRORS:
Terms.cpp:12: type specifier omitted for parameter
Terms.cpp:12: parse error before `&'
Terms.cpp:13: `operator >>(...)' must have an argument of class or enumerated type
Terms.cpp:13: `operator >>(...)' must take exactly two arguments
Terms.cpp: In function `class istream & operator >>(...)':
Terms.cpp:32: `istr' undeclared (first use this function)
Terms.cpp:32: (Each undeclared identifier is reported only once
Terms.cpp:32: for each function it appears in.)
Terms.cpp:41: `data' undeclared (first use this function)
Terms.cpp:62: `ture' undeclared (first use this function)
I tried adding:
istream:: istream& operator >> (istream& istr, Term& data)
but that did not work aswell
My .h file includes:
Code:
#ifndef TERMS_H
#define TERMS_H
#include <iostream>
class Terms
{
public:
Terms() {};
// Default constructor
void SetCoefficient (int a) { coef = a; };
// Sets coef
// Pre: An object Term has been declared
// Post: coef is set to the number passed in
void SetExponent (int a) { exp = a; };
// Sets exp
// Pre: An object Term has been declared
// Post: coef is set to the number passed in
void SetTermPrint (bool a) { okToPrint = a; };
// If the string being proccess contains ONLY a + or a -
// This will be set to false since we do not want to store
// these items in the linked list with an array of records
// Pre: An object Term has been declared
// Post: If the term is only a + or a - okToPrint is false
// else true.
void SetIfAnX (bool a) { hasAnX = a; };
// If the term being proccessed contains an X we set a to true
// Else false. This is neccessary since when we eventually find
// the polynomials derivative if no exists exist we want to ignore
// this term since it becomes 0.
// Pre: An object Term has been declared
// Post: If the string being passed in contains an x this sets hasAnX to be true
// else false;
int GetCoefficient () { return coef; };
// Returns what is stored in coef
// Post: coef is returned
int GetExponent () { return exp; };
// Returns what is stored in exp
// Post: exp is returned
bool GetTermPrint() { return okToPrint; };
// Returns what is stored in okToPrint;
// Post: okToPrint is reutrned
bool GetIfAnX () { return hasAnX; };
// Returns what is stored in hasAnX
// Post: hasAnX is returned
private:
int coef;
int exp;
bool okToPrint;
bool hasAnX;
// friend istream& operator >> ( istream&, Terms& );
};
istream& operator >> (istream& istr, Terms& data);
#endif
and my .cpp includes
Code:
// Terms.cpp
// This class is used to overload the input operator and set an object Term to have:
// 1) its coefficient
// 2) its exponent
// 3) if it contains an x
// 4) if it is needed to print
#include <stdlib.h>
#include <string>
#include "Terms.h"
istream& operator >> (istream& istr, Term& data)
{
int number;
int exponent;
bool print;
bool isThere;
bool isNegative;
string line;
string tempNum;
string tempExp;
const char* num;
const char* exp;
int length;
isNegative = false;
print = true;
isThere = false;
tempNum = "";
tempExp = "";
istr >> line;
cout << "THE LINE: " << line << endl;
if ( !istr.fail() )
{
if (line == "-")
{
isNegative = true;
print = false;
data.SetPrint(print);
}
else if (line == "+")
{
print = false;
data.SetPrint(print);
}
else
{
line = line + ";";
length = line.size();
for (int i = 0; i < length; i++)
{
if( isdigit(line[i]) )
{
tempNum = tempNum + line[i];
}
else if ( line[i] == 'x' )
{
isThere = ture;
i++;
if ( line[i] == ';' )
tempExp = tempExp + "1";
i--;
if (tempNum == "" || tempNum == "-")
tempNum = tempNum + "1";
}
else if( line[i] == '^' )
{
i++;
while ( line[i] != ';')
{
tempExp = tempExp + line[i];
i++;
}
}
else if ( line[i] = '-' )
{
tempNum = tempNum + line[i];
}
}
if ( tempExp == "" )
tempExp = "1";
num = tempNum.c_str();
exp = tempExp.c_str();
number = atoi(num);
exponent = atoi(exp);
if (isNegative)
{
number *= -1;
isNegative = false;
}
}
}
data.SetPrint(print);
data.SetIfAnX(isThere);
data.SetNumber(number);
data.SetCoefficient(exponent);
return istr;
}
Thanks,
Chris