我对在 C++ 中将指针作为参数传递有什么误解?
What do I misunderstand about passing a pointer as a parameter in C++?
我已经用 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);}
我搞砸了什么?
你的函数 change_named_params
接受一个指向 map<string, vector<string>>
的指针,而你只是给它地图。而是像 change_named_params(dvector, ¶ms_map);
这样称呼它。前面的&
会得到变量的内存地址
另一种解决方案是采用引用而不是指针。 (使您的函数成为 return-type name(type& name)
将使其接收对 type
的引用,但您可以像平常一样访问它。
不要使用指针。相反,使用这样的引用:
vector<string> change_named_params(vector<string> & to_check, map< string, vector<string> > & params_map)
如果您不需要修改函数内的参数,请将它们设为 const
引用。
引用,如指针,允许您将对象传递给函数而无需复制它们。但是引用允许比指针更简单的语法。
我已经用 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);}
我搞砸了什么?
你的函数 change_named_params
接受一个指向 map<string, vector<string>>
的指针,而你只是给它地图。而是像 change_named_params(dvector, ¶ms_map);
这样称呼它。前面的&
会得到变量的内存地址
另一种解决方案是采用引用而不是指针。 (使您的函数成为 return-type name(type& name)
将使其接收对 type
的引用,但您可以像平常一样访问它。
不要使用指针。相反,使用这样的引用:
vector<string> change_named_params(vector<string> & to_check, map< string, vector<string> > & params_map)
如果您不需要修改函数内的参数,请将它们设为 const
引用。
引用,如指针,允许您将对象传递给函数而无需复制它们。但是引用允许比指针更简单的语法。