我用C ++编写了几百行的程序。这是我的第一个真正的程序,我试图扩展其功能集。
但是,我很难将指针作为参数传递。
我认为您可以将其中一个参数作为开始指向某种类型对象的指针,但我的代码会产生以下错误:
函数调用:
if (count(dvector.begin(),dvector.end(), "TO") > 0 ) {
vector<string> dvector;
map<string, vector<string> > params_map ;
dvector = change_named_params(dvector, params_map);
}
功能签名:
vector<string> change_named_params(vector<string> to_check,
map< string, vector<string> > * params_map) {/* body */}
错误讯息:
../Stack_interface.cc: In function ‘void execute_user_function(std::string)’: ../Stack_interface.cc:451:52: error: cannot convert ‘std::map<std::basic_string<char>, std::vector<std::basic_string<char> > >’ to ‘std::map<std::basic_string<char>, std::vector<std::basic_string<char> > >*’ for argument ‘2’ to ‘std::vector<std::basic_string<char> > change_named_params(std::vector<std::basic_string<char> >, std::map<std::basic_string<char>, std::vector<std::basic_string<char> > >*)’ dvector = change_named_params(dvector, params_map);}
我搞砸了什么?
答案 0 :(得分:3)
你的函数change_named_params
接收指向map<string, vector<string>>
的指针,而你只是给它一张地图。称之为change_named_params(dvector, ¶ms_map);
。前面的&
将获取变量的内存地址。
另一种解决方案是接受引用而不是指针。 (将您的函数设为return-type name(type& name)
会使其引用type
,但您可以像平常一样访问它。
答案 1 :(得分:2)
不要使用指针。相反,使用这样的引用:
vector<string> change_named_params(vector<string> & to_check, map< string, vector<string> > & params_map)
如果您不需要修改功能中的参数,请将它们const
引用。
引用(如指针)允许您将对象传递给函数而不复制它们。但是引用允许比指针更容易的语法。