제거해야합니다 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->
액세스하는 동안.
클래스의 변수는 실제로 비어 있고 세분화 오류가 발생합니다.