C ++ вектор строк, указатели на функции и возникающее в результате разочарование - PullRequest
0 голосов
/ 11 мая 2010

Итак, я студент первого курса информатики, так как для моих финальных проектов мне нужно написать программу, которая использует вектор строк и применяет к ним различные функции.К сожалению, я действительно запутался в том, как использовать указатель для передачи вектора из функции в функцию.Ниже приведен пример кода, чтобы дать представление о том, о чем я говорю.Я также получаю сообщение об ошибке, когда пытаюсь задержать любой указатель.

спасибо.

#include <iostream>
#include <cstdlib>
#include <vector>
#include <string>

using namespace std;

vector<string>::pointer function_1(vector<string>::pointer ptr);
void function_2(vector<string>::pointer ptr);


int main()
{
   vector<string>::pointer ptr;
   vector<string> svector;

   ptr = &svector[0];

   function_1(ptr);
   function_2(ptr);
}

vector<string>::pointer function_1(vector<string>::pointer ptr)
{
   string line;

   for(int i = 0; i < 10; i++)
   {
       cout << "enter some input ! \n"; // i need to be able to pass a reference of the vector
       getline(cin, line);              // through various functions, and have the results 
      *ptr.pushback(line);             // reflectedin main(). But I cannot use member functions  
   }                                      // of vector with a deferenced pointer.

   return(ptr);
 }

 void function_2(vector<string>::pointer ptr)
 {
    for(int i = 0; i < 10; i++)
    {
       cout << *ptr[i] << endl;
    }
 }

Ответы [ 2 ]

10 голосов
/ 11 мая 2010

std::vector<T>::pointer не std::vector<T>*, а T*.

Не беспокойтесь об использовании указателей; просто используйте ссылки, например,

void function_1(std::vector<string>& vec) { /* ... */ }

function_2, который не изменяет вектор, должен принимать константную ссылку:

void function_2(const std::vector<string>& vec) { /* ... */ }
0 голосов
/ 11 мая 2010

Сделайте так, чтобы "vector :: pointer" = "vector *"

Также обратите внимание, что существуют другие проблемы, не связанные с вашим вопросом, такие как "* ptr.pushback (line)", фактически означающийнечто совершенно отличное от того, что вы думаете.Это должно быть "ptr-> pushback (line)".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...