2010-10-17 2 views
1

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

Заголовок является назовём его ref.h имеет функцию в нем, что является :..

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

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

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

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

То, что я до сих пор:

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

ref = ref::createinstace(configFile); 

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

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

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

к сожалению, я знаю, что это начинающий вопрос!

ответ

1

Вы передаете объекты за ссылки, как вы бы передать их за экземпляр:

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

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

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

Biker getBikerByNumber(int num); 

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

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

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

+0

Раньше в моем program .... Я создаю объект для ref.h, давайте назовем его ref. Затем установите этот объект для передачи ссылочного файла. Поэтому, когда я вызываю ref-> funcName, он должен передать мне результаты этого файла конфигурации в объекте Bike ... Но я получаю сообщение об ошибке «Нет подходящей функции для вызова ref :: funcName ....» – JohnStudio

+0

@John: Пожалуйста, отредактируйте свой вопрос, чтобы показать весь вызов функции и полное сообщение об ошибке, включая все «Кандидаты были:» строки. – Potatoswatter

+0

ok ... должно быть более полным сейчас ... извините! – JohnStudio

0

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

Bike foo; 
BikeArray bar; 
funcName(foo, bar); 
+0

Я пробовал это ... Это был мой первый недостаток, но я получаю сообщение об ошибке: «Нет подходящей функции для вызова ref :: funcName (bike &, bikearray &, int & ect .... – JohnStudio

0

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

Bike biker; 
funcName(biker, ...); 
0

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

Было бы достаточно, чтобы велосипед был объявлен в прямом эфире, но предположительно Bike.h содержит определение класса для Bike. BikeArray может быть классом или ЬурейеЕ, например

typedef std::vector<Bike> BikeArray; 

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

Смежные вопросы