我在头文件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时,它给了我错误。
答案 0 :(得分:2)
通过引用传递在调用方面没有特殊语法,只有签名/定义具有特殊&
。使用:
clsObj.func(text, Class1::enum_var1, 0, var3);
&text
获取text
变量的地址(类型为std::string*
)。当你试图将它传递给函数时,它不会指望一个指针,而这正是错误消息试图说的。
答案 1 :(得分:2)
clsObj.func(& text, Class1::enum_var1, 0 &var3);
应该是:
clsObj.func(text, Class1::enum_var1, 0, var3);
引用是被引用对象的别名,只能通过引用名称访问refferant。