-1

我在形式的头文件 Class2.hpp 中有一个函数:

class Class2{
void Test::func(std:: string & text, Class1::enum_var var1, unsigned var2, unsigned     &var3);};

我有以下形式的 Class1:

  class Class1{
  public:
 /// Different literal types
  enum enum_var {
  enum_var1, enum_var2, enum_var3
 }; };

我在 Class2.cpp 中将上述函数定义为

 void Test::func(std:: string & text, Class1::enum_var var1, unsigned var2, unsigned     &var3){
 cout<<"inside the function";
 }

现在我将上述函数称为:

Class2 clsObj;
std::string text="abc";
int var3=0;
clsObj.func( text, Class1::enum_var1, 0, &var3);

但是,当我运行程序时,它给了我以下错误:

 error: no matching function for call to ‘Class2::func(std::string*,   Class1::enum_var1,  int, int*)’
 note: candidate is:
 void Class2::func(std::string&, Type::ID, unsigned int, unsigned int&)
 note:  no known conversion for argument 4 from ‘unsigned int*’ to ‘unsigned int&’

我不知道如何摆脱错误..有人可以帮忙吗?

另外,我希望 var3 中的更改被反映回来......因此,除了返回或通过引用传递之外,我别无选择..当我通过引用传递 var3 时,它给了我错误。

4

2 回答 2

2

通过引用传递在调用方没有特殊语法,只有签名/定义具有特殊的&. 采用:

clsObj.func(text, Class1::enum_var1, 0, var3);

&text获取text变量的地址(类型为std::string*)。当您尝试将其传递给函数时,它不需要指针,而这正是错误消息试图表达的内容。

于 2012-06-07T03:15:38.743 回答
2
clsObj.func(& text, Class1::enum_var1, 0 &var3);

应该:

clsObj.func(text, Class1::enum_var1, 0, var3);

引用是被引用对象的别名,引用对象只能通过引用名称访问。

于 2012-06-07T03:15:41.663 回答