Pregunta

Estoy practicando C ++ y he hecho una clase que almacena secuencias leídas de formato rápido y sus nombres. El código está a continuación:

#include<fstream>
#include<iostream>
#include<string>
#include<vector>

using namespace std;

class Sequence {
    vector<string> fullSequence, sequenceNames;

public:
    void fastaRead(string fileName);
    string getSequence(int index);

};

string Sequence::getSequence(int index)
{
    return fullSequence[index];
}


void Sequence::fastaRead(string fileName)
{
    vector<string> fullSequence, sequenceNames;
    ifstream inputFile;
    inputFile.open(fileName);
    if (inputFile.is_open()) {
        string currentSeq;
        string line;
        bool newseq = false;
        while (getline(inputFile, line))
        {
            if (line[0] == '>') {
                sequenceNames.push_back(line.substr(1,line.size()));
                newseq = true;
            } else {
                if (newseq == true) {
                    fullSequence.push_back(currentSeq);
                    currentSeq = line;
                    newseq = false;
                } else {
                    currentSeq.append(line);
                }
            }
        }
    }
    inputFile.close();
}


int main()
{
    Sequence inseq;
    cout << "Fasta Sequence Filepath" << endl;
    string input;
    getline(cin, input);
    inseq.fastaRead(input);
    inseq.getSequence(0);
    return 0;
}

Sin embargo, cuando ejecuto el programa con el siguiente archivo de entrada ficticia:

>FirstSeq
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
>SecondSeq
TTTTTTTTTTTTTT
>ThirdSequence
CCCCCCCCCCCCCC
>FourthSequence
GGGGGGGGGGGGGG

Recibo una falla de segmentación cuando la línea inset.getSequence(0) se llama. ¿Qué es lo que he hecho que causa la falla de SEG y cómo me aseguro de que no suceda? Sé que puede tener algo que ver con los errores en los punteros, pero no creo que haya usado consejos que si recuerdo correctamente requieren el * carácter *.

Gracias Ben.

¿Fue útil?

Solución

Necesitas quitar vector<string> fullSequence, sequenceNames; en el vacío Sequence::fastaRead función. Cuando define esas variables dentro de esa función y las usa, no está accediendo a las de la clase que tienen el mismo nombre, está accediendo a las variables locales que ha definido en esa función, a menos que las prepense con this-> mientras accede.

Las variables en la clase están realmente vacías y obtienes una falla de segmentación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top