Ну, вы пытаетесь вернуть вектор в виде строки. Это не будет работать, потому что они разных типов и не имеют преобразования, определенного из одного в другой. Ваша функция имеет тип возврата string
.
Раствор 1
В вашем случае вы могли бы добавить строки в строку вместо добавления их в вектор? В любом случае вы используете результат в виде строки.
Вы можете изменить seqs на string
и добавить к нему данные с помощью оператора +=
.
Решение 2
Вы также можете изменить тип возвращаемого значения на vector<string>
, но вам нужно будет зациклить элементы и напечатать их вместо этого в main
.
vector<string> getseq(char * db_file)
{
...
return seqs;
}
Caveat Lector: скопирует все элементы. Если вы хотите избежать этого, передайте вектор как ссылку на функцию и добавьте к ней.
Зацикливание довольно просто, используя итераторы:
// Get the strings as a vector.
vector<string> seqs = getseq(argv[1]);
// This is just a matter of taste, we create an alias for the vector<string> iterator type.
typedef vector<string>:iterator_t string_iter;
// Loop till we hit the end of the vector.
for (string_iter i = seqs.begin(); i != seqs.end(); i++)
{
cout << *i; // you could add endlines, commas here etc.
}
Если вы хотите избежать копирования вектора и всех строк, сделайте getseq
со ссылкой на vector<string>
.
void getseq(char * db_file, vector<string> &seqs)
{
...
// vector<string> seqs; this line is not needed anymore.
...
// we don't need to return anything anymore
}
Вместо этого вам нужно будет создать vector<string>
в своей главной строке, сделав мой код выше:
// Get the strings as a vector.
vector<string> seqs; // Holds our strings.
getseq(argv[1], seqs); // We don't return anything.
// This is just a matter of taste, we create an alias for the vector<string> iterator type.
typedef vector<string>:iterator_t string_iter;
// Print prelude.
cout << "Sekwencje: \n";
// Loop till we hit the end of the vector.
for (string_iter i = seqs.begin(); i != seqs.end(); i++)
{
cout << *i << " "; // Do processing, add endlines, commas here etc.
}
cout << endl;
Редактировать после комментариев
int main(int argc, char * argv[1])
{
// This is what you need, sorry for the confusion.
// This copies the vector returned to seqs
vector<string> seqs = getseq(argv[1]);
// This is just a matter of taste, we create an alias for the vector<string> iterator type.
typedef vector<string>::iterator string_iter;
// Print prelude.
cout << "Sekwencje: \n";
// Loop till we hit the end of the vector.
for (string_iter i = seqs.begin(); i != seqs.end(); i++)
{
cout << *i << " "; // Do processing, add endlines, commas here etc.
}
cout << endl;
}