Umiddelbart kan jeg se at der er noget galt her:
bool ValidSeq(std::list<Data>& seq)
{
Data d;
Denne variabel (d) bruger du:
switch(d.id)
det er it (fra std::list<Data>::const_iterator it = seq.begin()) du skal bruge.
Så væk med variablen d og brug;
switch(it->d)
hej bertel. jeg har rettet den fejl du henviste mig til, og er kommet frem til følgende kode:
class Data
{
public:
int nr;
int id;
double val;
};
bool Split(const std::string str, Data& nr, Data& id, Data& val)
{
std::stringstream SS(str);
return SS >> nr.nr >> id.id >> val.val;
}
bool ValidSeq(std::list<Data>& seq)
{
if(seq.size() < 3)
return false;
std::list<Data>::const_iterator it = seq.begin();
switch(it->id)
{
case 1:
++it;
switch(it->id)
{
case 1:
++it;
switch(it->id)
{
case 2: // 1-1-2
return true;
switch(it->id)
{
case 1:
++it;
switch(it->id)
{
case 2:
return true;
}
break;
}
break;
}
break;
}
break;
}
return false;
}
int main()
{
Data nr;
Data id;
Data val;
std::ifstream file("indata.txt");
std::string line;
std::list<Data > seq;
while(std::getline(file, line) && Split(line, nr, id, val))
{
seq.push_back(id);
if(seq.size() > 3)
seq.pop_front();
if(ValidSeq(seq))
std::cout << line << std::endl;
}
system("PAUSE");
return 0;
}
når jeg kører programmet, får jeg følgnde udskrevet på skærmen
9 2 0
16 2 144.070
30 2 126.910
33 2 0
36 2 68.902
41 2 0
57 2 96.606
62 2 144.070
65 2 145.070
68 2 144.334
81 2 146.217
89 2 535.575
95 2 135.575
107 2 87.490
altså det samme som før. nu er min opgave så bare at få vist resten af id kombinationen. altså så der også kommer til at stå.
7 1 702.00
8 1 15.00
9 2 0.000
skal jeg tilføje en "cout" for hver case eller skal jeg return true hvor hver case ???