2013-11-06 6 views
2

Я пытаюсь все более и более комфортно работать с C++, и я перешел к тому, чтобы писать некоторые файлы. Я был на полпути через что-то, что бы быть в состоянии разобрать Fasta файлы, и я немного застрял получил:Пытается распечатать содержимое вектора

#include<fstream> 
#include<iostream> 
#include<string> 
#include<vector> 

using namespace std; 

//A function for reading in DNA files in FASTA format. 
void fastaRead(string file) 
{ 
    ifstream inputFile; 
    inputFile.open(file); 
    if (inputFile.is_open()) { 
     vector<string> seqNames; 
     vector<string> sequences; 
     string currentSeq; 
     string line; 
     while (getline(inputFile, line)) 
     { 
      if (line[0] == '>') { 
       seqNames.push_back(line); 
      } 
     } 
    } 
    for(int i = 0; i < seqNames.size(); i++){ 
     cout << seqNames[i] << endl; 
    } 
    inputFile.close(); 
} 

int main() 
{ 
    string fileName; 
    cout << "Enter the filename and path of the fasta file" << endl; 
    getline(cin, fileName); 
    cout << "The file name specified was: " << fileName << endl; 
    fastaRead(fileName); 
    return 0; 
} 

Функция должна пройти через текстовый файл, как показано ниже:

Hello World! 
>foo 
bleep bleep 
>nope 

и определить которые начинаются с '>' и нажимают их на векторные seqNames, а затем сообщают содержимое в командную строку. - Поэтому я пытаюсь написать способность обнаруживать быстрые головоломки формата. Однако, когда я компилирую я сказал:

n95753:Desktop wardb$ g++ testfasta.cpp 
testfasta.cpp:25:25: error: use of undeclared identifier 'seqNames' 
    for(int i = 0; i < seqNames.size(); i++){ 
         ^
testfasta.cpp:26:17: error: use of undeclared identifier 'seqNames' 
     cout << seqNames[i] << endl; 

Однако я уверен, что я объявил вектор в строке: vector<string> seqNames;

Спасибо, Бен.

+0

Я предлагаю вам использовать некоторую среду IDE, таким образом, вы обнаружите такие тривиальные ошибки даже перед компиляцией. (я не являюсь нисходящим) –

+0

Я использую Xcode как IDE, хотя только с одним файлом cpp, который по какой-то причине отличается от открытого в Xcode целым проектом, все еще привыкший к его использованию. – Ward9250

ответ

5

Это потому, что вы объявили векторы во внутренней области if. Вы должны переместить декларацию вне, так что ваш while цикл может видеть их, а также:

vector<string> seqNames; 
vector<string> sequences; 
if (inputFile.is_open()) { 
    string currentSeq; 
    string line; 
    while (getline(inputFile, line)) 
    { 
     if (line[0] == '>') { 
      seqNames.push_back(line); 
     } 
    } 
} 
for(int i = 0; i < seqNames.size(); i++){ 
    cout << seqNames[i] << endl; 
} 
2
if (inputFile.is_open()) { 
    vector<string> seqNames; 
    vector<string> sequences; 
    ... 
} 
for(int i = 0; i < seqNames.size(); i++){ 
    cout << seqNames[i] << endl; 
} 

определяет seqNames в рамках if заявления. После оператора if идентификатор seqNames не определен. Определите его ранее в области, которая охватывает как if, так и for.

Смежные вопросы