傻C ++参考问题

时间:2010-10-17 14:38:35

标签: c++ reference

我不知道如何调用带有引用的函数:(这是一个我知道的愚蠢的菜鸟问题。

标题是我们称之为ref.h的函数是:

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

ref.h内,还有另一个名为Bike.h的标头。

如何从我的funcName致电main.cpp(事实上,我包括Bike.href.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和double ...没有自行车的对象......

...我得到错误“没有匹配的函数用于调用ref :: funcName(Bike&,BikeArray&,int&,int&)

抱歉,我知道这是一个新手问题!

4 个答案:

答案 0 :(得分: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引用(以及下一个C ++标准引入并已由某些编译器实现的rvalue引用)。

答案 1 :(得分:0)

无论其参数是通过值传递还是通过引用传递,都以相同的方式调用函数。

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

答案 2 :(得分:0)

传递值不是指针。

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

答案 3 :(得分:0)

funcName是虚拟的,因此必须是类成员函数。因此,您需要有一个引用或指向它最初成员的类。

自行车被向前宣布已足够,但推测Bike.h包含了Bike的类定义。 BikeArray可能是类或typedef,例如

typedef std::vector<Bike> BikeArray;

要调用funcName,您可以使用它来调用它。或 - &gt;在你的类引用或指针上,然后使用Bike的实例和BikeArray的实例,以及它需要的任何其他参数。