Pergunta

Eu estou praticando C++ e fizeram uma classe que armazena seqüências de ler no formato rápido, bem como os seus nomes.O código está abaixo:

#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;
}

No entanto, quando eu executar o programa com a seguinte fictício arquivo de entrada:

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

Eu recebo um erro de falha de segmentação, quando a linha inset.getSequence(0) é chamado.O que é que eu fiz o que faz com que o seg falta e como posso ter certeza de que isso não acontece?Eu sei que ela pode ter algo a ver com erros nos ponteiros, mas eu não acho que eu tenha usado os ponteiros que se eu me lembro corretamente requer o caractere*.

Obrigado, Ben.

Foi útil?

Solução

Você precisa remover vector<string> fullSequence, sequenceNames; no vazio Sequence::fastaRead função.Quando você definir essas variáveis dentro da função e usá-los, você não está acessando os únicos na classe que têm o mesmo nome, está a aceder a variáveis locais que você tem definida na função, a menos que você preceder-los com this-> ao acessar.

As variáveis de classe são, na verdade, o vazio, e você receber uma falha de segmentação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top