Как передать структуру функции в C ++

0

Я создал структуру Route.h

#include "stdafx.h"
using namespace std;

struct Route {
    string startPoint;
    string endPoint;
    int number;
};

и мне нужно передать эту структуру для работы. Я использовал ссылку:

void CreateRoute(Route &route)
{
  int start = rand() % 10;
  int end = rand() % 10;

  if (start == end)
  {
    while(true)
    {
      end = rand()%10;
      if(end != start) break;
    }
  }

  route.startPoint = SetPoint(start);
  route.endPoint = SetPoint(end);
  route.number = SetNumber();
}

но кажется, что использование указателей - лучший способ сделать это, но я не знаю, как использовать указатели для этого?

Теги:
struct

3 ответа

3
Лучший ответ

В этом случае, почему вы просто не возвращаете вновь построенный объект?

struct route
{
    std::string start_point;
    std::string end_point;
    int number;
};

route make_random_route()
{
    route r;

    int start = std::rand() % 10;
    int end = std::rand() % 10;

    while ( start == end) {
        end = std::rand() % 10;
    }

    r.start_point = make_point(start);
    r.end_point = make_point(end);
    r.number = make_number();

    return r;
}

Его тривиально, и с движением нет копии.

  • 0
    Да, к настоящему времени я изменил свою функцию all и сделал Route тип возврата Route CreateRoute() .
2

but it seems the using of pointers is the better way to do it

Одна из причин, почему C++ имеет ссылки на начало, состоит в том, чтобы обойти проблемы с указателями, стрелками и множеством круглых скобок.

Вы можете легко преобразовать его, чтобы использовать тип указателя, но тип ref просто чист.

void CreateRoute(Route* route);

будет вашим выражением, и вы бы назвали его, используя

Route route;
CreateRoute(&route);
  • 2
    проверьте ваш последний пример кода ..
  • 1
    Вам не нужно звонить new вообще. Это только добавит путаницы.
Показать ещё 4 комментария
1

Я думаю, вы должны улучшить свой C++. Ниже мой простой ответ.

void CreateRoute(Route *route)
{
if (route == NULL)
    return;

int start = rand()%10;
int end = rand()%10;

if (start == end)
{
    while(true)
    {
        end = rand()%10;
        if(end != start) break;
    }
}

route->startPoint = SetPoint(start);
route->endPoint = SetPoint(end);
route->number = SetNumber();
}
  • 1
    Хотя это и правильно, это никак не рассеивает странные представления ОП о передаче указателя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню