Глупый C ++ справочный вопрос - PullRequest
1 голос
/ 17 октября 2010

Я не знаю, как вызвать функцию со ссылкой :( Это глупый вопрос, я знаю.

Заголовок, давайте назовем его ref.h имеет функцию:

virtual int funcName (Bike &biker, BikeArray &bikearray, int x, int y .... )

Внутри ref.h есть еще один заголовок, который называется Bike.h.

Как мне позвонить funcName с моего main.cpp (обв. Я включил Bike.h и ref.h

Я вызывал другие функции из ref.h в моей программе, но у других функций не было ссылок на Bike, только переменные ... Как мне все объявить?

Что у меня так далеко:

ref *ref;
Bike bike;
BikeArray bikearray;
int x, y;

ref = ref::createinstace(configFile);

ref->funcName(bike, bikearray, x,y);

ref-> funcName должен возвращать результаты, основываясь на переданном configFile. Я сделал это ранее с другой функцией в ref.h, но эта функция имела только int и удваивается ... нет объектов для Bike ...

... и я получаю сообщение об ошибке "нет подходящей функции для вызова ref :: funcName (Bike &, BikeArray &, int &, int &)

Извините, я знаю, что это вопрос новичка!

Ответы [ 4 ]

1 голос
/ 17 октября 2010

Вы передаете объекты по ссылке, как если бы вы передавали их по копии:

someObj.funcName(myBiker, myBikeArray, 42, ...);

Обратите внимание, что если функция принимает аргументы по ссылке, отличной от const, это означает, что функция может изменить им.(Подробнее см. здесь .)

Кроме того, вы не можете передавать значения (временные объекты) в качестве аргументов, не являющихся const.Это означает, что если у вас есть функция, которая возвращает байкер:

Biker getBikerByNumber(int num);

, вы не можете использовать ее в качестве аргумента для funcName:

someObj.funcName(getBikerByNumber(42), myBikeArray, 42, ...); // won't compile

, поскольку rvalues ​​непривязка к не const ссылкам.Тем не менее, они связываются с const ссылками (а также с ссылками rvalue, которые будут введены в следующем стандарте C ++ и уже реализованы некоторыми компиляторами).

0 голосов
/ 17 октября 2010

Передайте ему значения, а не указатели.

Bike biker;
funcName(biker, ...);
0 голосов
/ 17 октября 2010

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

Было бы достаточно, чтобы Bike был объявлен заранее, но предположительно Bike.h содержит определение класса для Bike.BikeArray может быть классом или typedef, например,

typedef std::vector<Bike> BikeArray;

. Для вызова funcName вы должны вызывать его с помощью.или -> на имеющуюся у вас ссылку на класс или указатель, затем используйте экземпляр Bike и экземпляр BikeArray для записи, а также любые другие требуемые параметры.

0 голосов
/ 17 октября 2010

Вы вызываете функцию одинаково, независимо от того, переданы ли ее аргументы по значению или по ссылке.

Bike foo;
BikeArray bar;
funcName(foo, bar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...