削除する必要があります vector<string> fullSequence, sequenceNames;
ボイドで Sequence::fastaRead
関数。その関数内のこれらの変数を定義して使用する場合、同じ名前のクラスの変数にアクセスしていない場合、その関数で定義したローカル変数にアクセスしています。 this->
アクセス中。
クラスの変数は実際には空で、セグメンテーションの障害が発生します。
質問
私は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->
アクセス中。
クラスの変数は実際には空で、セグメンテーションの障害が発生します。