我有一对String
和String &
的类型,我可以将值传递给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
不,这是*value
。
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)。
我认为你的意思是以下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;