Я создал структуру 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 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;
}
Его тривиально, и с движением нет копии.
but it seems the using of pointers is the better way to do it
Одна из причин, почему C++ имеет ссылки на начало, состоит в том, чтобы обойти проблемы с указателями, стрелками и множеством круглых скобок.
Вы можете легко преобразовать его, чтобы использовать тип указателя, но тип ref просто чист.
void CreateRoute(Route* route);
будет вашим выражением, и вы бы назвали его, используя
Route route;
CreateRoute(&route);
new
вообще. Это только добавит путаницы.
Я думаю, вы должны улучшить свой 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();
}
Route
тип возвратаRoute CreateRoute()
.