سؤال

أنا أمارس C ++ وقد صنعت فئة تخزن تسلسلها من تنسيق سريع وكذلك أسمائها. الكود أدناه:

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

ومع ذلك ، عندما أقوم بتشغيل البرنامج مع ملف الإدخال الوهمي التالي:

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

أحصل على خطأ تجزئة عند الخط inset.getSequence(0) يسمى. ما الذي فعلته والذي يسبب خطأ SEG وكيف أتأكد من عدم حدوثه؟ أعلم أنه يمكن أن يكون له علاقة بالأخطاء في المؤشرات ، لكنني لا أعتقد أنني استخدمت مؤشرات إذا كنت أتذكر بشكل صحيح الحرف *.

شكرا بن.

هل كانت مفيدة؟

المحلول

تحتاج إلى إزالة vector<string> fullSequence, sequenceNames; في الفراغ Sequence::fastaRead وظيفة. عندما تحدد هذه المتغيرات داخل هذه الوظيفة وتستخدمها ، فأنت لا تصل إلى تلك الموجودة في الفصل الذي له نفس الاسم ، فأنت تصل إلى المتغيرات المحلية التي حددتها في هذه الوظيفة ، إلا إذا قمت بتقديمها معها this-> أثناء الوصول.

المتغيرات في الفصل فارغة بالفعل وتحصل على خطأ تجزئة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top