I have this code where I have declared a struct with some functions. Trying to write the function implementation outside the struct declaration and do not know how to proceed.
#ifndef ParseEl_hh
#define ParseEl_hh
#include <iostream>
#include <fstream>
#include "DynBaseObj.hh"
#include "List.hh"
#include "Stack.hh"
#include "Tree.hh"
#include "Vect2.hh"
#include "Vector.hh"
#include "String.hh"
#include "common.hh"
enum TypeParse { PARAM, LIST };
////////////////////////////////////////////////////////////////////////////////////////////////////
struct ParseEl {
enum TypeParse Type;
int Hash;
String Str;
String Name;
List<String> StringList;
List<int> Ord;
ParseEl() { }
ParseEl(
const String& name,
String& s,
const List<int>& ord) {
Name = name;
Str = s;
Type = PARAM;
Ord = ord;
Hash = Name.Hash();
while ((Ord.size() > 0) && (Ord[Ord.size()-1] == 0)) {
Ord.Delete(Ord.size() - 1);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
ParseEl(
const String& name,
const List<String>& ls,
const List<int>& ord) {
Name = name;
StringList = ls;
Type = LIST;
Ord = ord;
Hash = Name.Hash();
while ((Ord.size() > 0) && (Ord[Ord.size()-1] == 0)) {
Ord.Delete(Ord.size() - 1);
}
}
ParseEl(const ParseEl& parsel ) {
Name = parsel.Name;
Type = parsel.Type;
Str = parsel.Str;
StringList = parsel.StringList;
Ord = parsel.Ord;
Hash = parsel.Hash;
}
friend int operator == (
const ParseEl p1,
const ParseEl p2) {
return ( (p1.Hash == p2.Hash) && (p1.Type == p2.Type)
&& (p1.Name == p2.Name) && (p1.Ord == p2.Ord)
&& (p1.Str == p2.Str) && (p1.StringList == p2.StringList) );
}
};
#endif
---------- Post updated at 09:08 AM ---------- Previous update was at 06:46 AM ----------
I have now changed the code and things are working fine. My last problem is how to take care of ParseEl() { } to be outside the struct. It is not doing anything so I suppose I can just declare it inside the struct as ParseEl();
#ifndef ParseEl_hh
#define ParseEl_hh
#include <iostream>
#include <fstream>
#include "DynBaseObj.hh"
#include "List.hh"
#include "Stack.hh"
#include "Tree.hh"
#include "Vect2.hh"
#include "Vector.hh"
#include "String.hh"
#include "common.hh"
enum TypeParse { PARAM, LIST };
////////////////////////////////////////////////////////////////////////////////////////////////////
struct ParseEl {
// -- Attributes -----------------------------------------------------------------------------------
enum TypeParse Type;
int Hash;
String Str;
String Name;
List<String> StringList;
List<int> Ord;
// -- Operations -----------------------------------------------------------------------------------
ParseEl() { }
ParseEl(
const String& name,
String& s,
const List<int>& ord);
ParseEl(
const String& name,
const List<String>& ls,
const List<int>& ord);
ParseEl(
const ParseEl& parsel);
friend int operator == (
const ParseEl p1,
const ParseEl p2);
};
////////////////////////////////////////////////////////////////////////////////////////////////////
ParseEl::ParseEl(
const String& name,
String& s,
const List<int>& ord) {
Name = name;
Str = s;
Type = PARAM;
Ord = ord;
Hash = Name.Hash();
while ((Ord.size() > 0) && (Ord[Ord.size()-1] == 0)) {
Ord.Delete(Ord.size() - 1);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
ParseEl::ParseEl(
const String& name,
const List<String>& ls,
const List<int>& ord) {
Name = name;
StringList = ls;
Type = LIST;
Ord = ord;
Hash = Name.Hash();
while ((Ord.size() > 0) && (Ord[Ord.size()-1] == 0)) {
Ord.Delete(Ord.size() - 1);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
ParseEl::ParseEl(
const ParseEl& parsel) {
Name = parsel.Name;
Type = parsel.Type;
Str = parsel.Str;
StringList = parsel.StringList;
Ord = parsel.Ord;
Hash = parsel.Hash;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
int operator == (
const ParseEl p1,
const ParseEl p2) {
return ( (p1.Hash == p2.Hash) && (p1.Type == p2.Type) && (p1.Name == p2.Name)
&& (p1.Ord == p2.Ord) && (p1.Str == p2.Str) && (p1.StringList == p2.StringList) );
}
#endif