2010-10-17 117 views
1

我不知道如何调用一个函数的引用它:(这是一个愚蠢的noob问题,我知道。傻C++参考问题

标题是让我们叫它ref.h中有一个功能就是:。

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

ref.h有被称为Bike.h另一头

我怎么叫funcName从我main.cpp(OBV我包括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); 

参考 - >了funcName应该返回基于CONFIGFILE我传递的结果。我之前用ref.h中的另一个函数完成了这个工作,但该函数只有int和double ...没有对象Bike ...

...我得到错误“没有匹配函数调用ref ::了funcName(自行车&,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 

因为右值不绑定到非const引用。但是它们绑定到const引用,并且还引用了下一个C++标准引入的rvalue引用,并且已经由一些编译器实现。

+0

在我的早期程序....我为ref.h创建一个对象,让它调用ref,然后设置该对象来传递一个引用文件,所以当我调用ref-> funcName时,它应该会传递给我这个配置文件的结果在自行车对象...但我得到错误“没有匹配函数调用ref :: funcName ....” – JohnStudio 2010-10-17 15:53:37

+0

@约翰:请编辑您的问题,以显示整个函数调用和整个结果的错误信息,包括所有“候选人是:”行 – Potatoswatter 2010-10-17 15:56:00

+0

好的...现在应该更完整...对不起! – JohnStudio 2010-10-17 16:07:40

0

无论其参数是按值传递调用该​​函数以同样的方式或参考。

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

我试过......这是我的第一个怪人,但我得到一个错误,说:“没有匹配的函数调用ref :: funcName(bike&,bikearray&,int&ect .... – JohnStudio 2010-10-17 15:42:33

0

传递它的值不是指针。

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

funcName是虚拟的,所以必须是类成员函数。因此,您需要有一个参考或指向它是第一个成员的类。

对Bike而言,这已经足够了,但可能Bike.h包含Bike的类定义。 BikeArray可能是一个类或一个typedef,例如

typedef std::vector<Bike> BikeArray; 

要调用了funcName那么你将使用调用它。或 - >上的类引用或指针,然后使用一个Bike实例和一个BikeArray实例来写入,以及它需要的任何其他参数。