Передача структуры с несколькими записями в c ++ - PullRequest
3 голосов
/ 27 июня 2010

Я пытаюсь передать координату, которая определена как структура с 2 целочисленными параметрами (структура называется коорди), следующим образом:

UpdateB({0,0}); 

где входной аргумент имеет тип координат (т.е.В приведенном выше заявлении я пытаюсь передать координату 0,0).UpdateB - это некоторая функция.Я получаю сообщение об ошибке, есть идеи, в чем может быть проблема?

Ответы [ 4 ]

7 голосов
/ 27 июня 2010

Создайте конструктор, принимающий два аргумента. Передайте это следующим образом:

MyFunc(Point2d(0,0));

2 голосов
/ 27 июня 2010

У Павла все в порядке. Если вы хотите создать экземпляр структуры при передаче его функции, вам нужно создать для него конструктор. Затем создайте новый экземпляр координирования в качестве аргумента, который вы передаете функции. Для структуры что-то вроде ...

struct coord
{
    int x, y;

    coord(int xvalue, int yvalue)
    {
        x = xvalue;
        y = yvalue;
    }
};

... должен сделать свое дело. Тогда просто беги ...

UpdateB(coord(x, y));

... где x и y - ваши значения.

1 голос
/ 27 июня 2010

Синтаксис, который вы используете, будет действительным C ++ 0x ( единообразные инициализаторы ) и действительным C99 (составные литералы).
В C ++ 03 вы должны использовать либо определяемые пользователем конструкторы, либо вспомогательные функции, синтаксис фигурных скобок работает только для агрегатной инициализации .

Если ваша структура - POD , и вам нужно, чтобы она осталась одна, вы должны использовать вспомогательную функцию:

coord make_coord(int x, int y) {
    coord c = {x, y};
    return c;
}

UpdateB(make_coord(x, y));

В противном случае, как уже упоминалось, дать ему конструктор

0 голосов
/ 27 июня 2010

Правильно решение Павла Радзивиловского (+1).

Однако вы должны знать, что грядущий новый стандарт C ++ 0x разрешит синтаксис вашего примера, если вы предоставите конструктор с двумя параметрами (и, возможно, если вы предоставите конструктор со списком инициализаторов, но это здесь не полезно).

Эта функция уже доступна в GCC начиная с версии 4.4 , если вы используете ее, вы можете включить ее, включив C ++ 0x.

...