Frage

Ich übe C ++ und habe eine Klasse erstellt, in der Sequenzen aus dem schnellen Format sowie deren Namen gelesen werden. Der Code ist unten:

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

Wenn ich das Programm jedoch mit der folgenden Dummy -Eingabedatei ausführe:

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

Ich bekomme einen Segmentierungsfehler, wenn die Linie inset.getSequence(0) wird genannt. Was habe ich getan, das den SEG -Fehler verursacht und wie stelle ich sicher, dass es nicht passiert? Ich weiß, dass es etwas mit Fehlern in Zeigern zu tun haben kann, aber ich glaube nicht, dass ich Zeiger verwendet habe, die, wenn ich mich richtig erinnere, den * Charakter erfordert.

Danke, Ben.

War es hilfreich?

Lösung

Sie müssen entfernen vector<string> fullSequence, sequenceNames; in der Leere Sequence::fastaRead Funktion. Wenn Sie diese Variablen in dieser Funktion definieren und sie verwenden, greifen Sie nicht auf die in der Klasse zugänglich zu this-> beim Zugriff.

Die Variablen in der Klasse sind tatsächlich leer und Sie erhalten einen Segmentierungsfehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top