关于在C ++中将指针作为参数传递,我有什么误解?

时间:2015-12-15 22:38:43

标签: c++ vector stl c++03

我用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);}

我搞砸了什么?

2 个答案:

答案 0 :(得分:3)

你的函数change_named_params接收指向map<string, vector<string>>的指针,而你只是给它一张地图。称之为change_named_params(dvector, &params_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引用。

引用(如指针)允许您将对象传递给函数而不复制它们。但是引用允许比指针更容易的语法。