在C ++中将值传递给Pair

问题描述 投票:-3回答:2

我有一对StringString &的类型,我可以将值传递给Pair,如下所示

typedef std::pair<std::string, std::string&> NamedNode;
voi main(){
std::string name = "name";
std::string * value = new std::string("value") ;
NamedNode(name,*value);}

当我将值传递给Pair时如上所示,我遇到以下错误:

错误C2529:'_ Val2':对引用的引用是非法的c:\ program files(x86)\ microsoft visual studio 9.0 \ vc \ include \ utility

错误C2665:'std :: pair <_Ty1,_Ty2> :: pair':3个重载中没有一个可以转换所有参数类型d:\ jzon \ sample.cpp

以下警告:

警告1警告C4181:应用于参考类型的限定符;忽略c:\ program files(x86)\ microsoft visual studio 9.0 \ vc \ include \ utility

我正在使用C ++ 98,Microsoft visual studio 2008,OS-windows XP

c++ stl
2个回答
1
投票

不,这是*value

  • 当需要处理参数时,C ++中的标准主要是qazxsw poi,当对命令行参数和qazxsw poi或int main()不感兴趣时​​。

代码(在GCC 4.9.1中使用C ++ 11测试):

int main(int argc, char* argv[])

int main(int argc, char** argv)运算符意味着#include <utility> #include <iostream> #include <string> typedef std::pair<std::string, std::string&> NamedNode; int main() { std::string name = "name"; std::string* value = new std::string("value"); NamedNode a(name, *value); std::cout << a.first << " " << a.second << std::endl; return 0; } 在这种情况下&你需要通过reference of而不是std::string

提示:不要在std::string中使用new,几乎可以肯定不需要并允许不好的练习(例如:当抛出异常时内存泄漏等等),而是使用std :: unique_ptr或std :: shared_ptr(C ++) 11),或者boost :: shared_ptr和boost :: scope_ptr(如果不允许C ++ 11)。


1
投票

我认为你的意思是以下typedef

std::string*

如果你的意思是

C++

然后主要看起来像

typedef std::pair<std::string, std::string *> NamedNode;

int main()
{
    std::string name = "name";
    std::string *value = new std::string( "value" ) ;
    auto p = NamedNode( name, value );
    delete value;
}

这是另外两种方法

typedef std::pair<std::string, std::string &> NamedNode;
© www.soinside.com 2019 - 2024. All rights reserved.