#include "SequenceDatabase.h"
#include <cstdlib>
#include <cstring>
// Parameterized constructor
SequenceDatabase::SequenceDatabase()
{
this->sequenceList = list<Sequence *>();
}
//destructor
SequenceDatabase::~SequenceDatabase(){}
// method to find an entry in the list
//method to process the line passed and get the commands
void SequenceDatabase::processLine(string line)
{
char *charPrtLine = new char[line.length() + 1];
strcpy(charPrtLine, line.c_str());
char * command = strtok (charPrtLine," \t");
if(command[0] == 'p' || command[0] == 'P') // Print
{
char * idStr = strtok (NULL," \t");
long id = atol(idStr);
cout << "Note: Printing " << id << "...\n";
bool idFound = false;
list<Sequence*>::iterator iter = sequenceList.begin(); // iterator to the list
while(iter != sequenceList.end())
{
if(iter._Ptr->_Myval->getId() == id)
{
iter._Ptr->_Myval->print();
idFound = true;
break;
}
iter++;
}
if(!idFound)
cout << "Can not find item (" << id << ") !\n";
}
else if(command[0] == 'o' || command[0] == 'O') // obliterate
{
char * idStr = strtok (NULL," \t");
long id = atol(idStr);
cout << "Note: Obliterating " << id << "...\n";
bool idFound = false;
list<Sequence*>::iterator iter = sequenceList.begin(); // iterator to the list
while(iter != sequenceList.end())
{
if(iter._Ptr->_Myval->getId() == id)
{
sequenceList.remove(iter._Ptr->_Myval);
idFound = true;
break;
}
iter++;
}
if(!idFound)
cout << "Can not delete item (" << id << "), NOT found!\n";
}
else if(command[0] == 'd' || command[0] == 'D') // DNA
{
char * labelStr = strtok (NULL," \t");
string label(labelStr);
char * idStr = strtok (NULL," \t");
long id = atol(idStr);
char * SeqStr = strtok (NULL," \t");
string seq(SeqStr);
char * seqLenStr = strtok (NULL," \t");
unsigned int seqLen = atoi(seqLenStr);
char * indexCodeRegStr = strtok (NULL," \t");
int indexCodeReg = atoi(indexCodeRegStr);
this->sequenceList.push_back(new DNA(label,id,seq,seqLen,indexCodeReg));
}
else if(command[0] == 'r' || command[0] == 'R') // RNA
{
char * labelStr = strtok (NULL," \t");
string label(labelStr);
char * idStr = strtok (NULL," \t");
long id = atol(idStr);
char * SeqStr = strtok (NULL," \t");
string seq(SeqStr);
char * seqLenStr = strtok (NULL," \t");
unsigned int seqLen = atoi(seqLenStr);
char * typeRNAStr = strtok (NULL," \t");
int typeRNA = atoi(typeRNAStr);
this->sequenceList.push_back(new RNA(label,id,seq,seqLen,(typeOfRNA)typeRNA));
}
else if(command[0] == 'a' || command[0] == 'A') // AA
{
char * labelStr = strtok (NULL," \t");
string label(labelStr);
char * idStr = strtok (NULL," \t");
long id = atol(idStr);
char * SeqStr = strtok (NULL," \t");
string seq(SeqStr);
char * seqLenStr = strtok (NULL," \t");
unsigned int seqLen = atoi(seqLenStr);
char * readingFrameStr = strtok (NULL," \t");
int readingFrame = atoi(readingFrameStr);
this->sequenceList.push_back(new AA(label,id,seq,seqLen,readingFrame));
}
else if(command[0] == 's' || command[0] == 'S') // Size of the master list
{
cout << "Entries: "
<< this->sequenceList.size() << " total\n";
}
delete [] charPrtLine;
}
//method to import entries from the supplied command file
void SequenceDatabase::importEntries(string fileName)
{
string line;
const char * ttt = fileName.c_str();
ifstream myfile (ttt);
if (myfile.is_open())
{
while ( getline(myfile,line) )
{
this->processLine(line);
}
myfile.close();
}
}
代码在Visual Studio中编译良好,但在使用g ++的Unix终端中编译。
g ++中弹出的错误:
在成员函数&#39; void SequenceDatabase :: processLine(string line)&#39;:
32,34,52,54:错误:&#39; struct std :: _ List_iterator&#39;没有名为&#39; _Ptr&#39;
的成员我意识到使用_Ptr成员是为什么它不能使用g ++在Unix终端中工作,但是如何将它替换为在Visual Studio和Unix中工作?