![](/img/trans.png)
[英]Qt::make_shared for creating QSharedPtr as std::make_shared for creating std::shared_ptr
[英]make_shared create std::shared_ptr? gcc 4.6.2
我正在使用gcc 4.6.2。
我试图在向量shared_ptr的push_back中。
但是gcc每次都会给我一个错误。
这是我的代码行:
std::vector< std::tr1::shared_ptr<Process> > procs;
std::string line;
while (getline(file, line) && line.find(JobMask) != std::string::npos)
{
std::string procName = line.substr(line.find(JobMask) + JobMask.size());
std::vector<Instruction> procInstructions = extractProgram(file);
std::queue<int> procInputs = extractInputs(file);
if (!procInstructions.empty())
procs.push_back(std::make_shared<Process>(Process(procName, procInputs, procInstructions))); //line 51
}
return procs;
我的gcc给出的错误是:
Process.cpp: In static member function 'static std::vector<std::tr1::shared_ptr<RMMIX::Process> > RMMIX::Process::createProcesses(const string&)':
Process.cpp:51:95: error: no matching function for call to 'std::vector<std::tr1::shared_ptr<RMMIX::Process> >::push_back(std::shared_ptr<RMMIX::Process>)'
Process.cpp:51:95: note: candidates are:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/include/g++-v4/bits/stl_vector.h:826:7: note: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::tr1::shared_ptr<RMMIX::Process>, _Alloc = std::allocator<std::tr1::shared_ptr<RMMIX::Process> >, std::vector<_Tp, _Alloc>::value_type = std::tr1::shared_ptr<RMMIX::Process>]
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/include/g++-v4/bits/stl_vector.h:826:7: note: no known conversion for argument 1 from 'std::shared_ptr<RMMIX::Process>' to 'const value_type& {aka const std::tr1::shared_ptr<RMMIX::Process>&}'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/include/g++-v4/bits/stl_vector.h:839:7: note: void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = std::tr1::shared_ptr<RMMIX::Process>, _Alloc = std::allocator<std::tr1::shared_ptr<RMMIX::Process> >, std::vector<_Tp, _Alloc>::value_type = std::tr1::shared_ptr<RMMIX::Process>]
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/include/g++-v4/bits/stl_vector.h:839:7: note: no known conversion for argument 1 from 'std::shared_ptr<RMMIX::Process>' to 'std::vector<std::tr1::shared_ptr<RMMIX::Process> >::value_type&& {aka std::tr1::shared_ptr<RMMIX::Process>&&}'
在我看来,错误说的是,std :: make_shared创建了一个std :: shared_ptr。
但是在gcc中,shared_ptr在命名空间std :: tr1中。
我该如何解决?
如果我理解正确, make_shared
在C ++ 11中是新的,并且在命名空间std
,但是只有在使用-std=gnu++0x
或类似的-std=gnu++0x
编译时,它才可用。 但是,如果您这样做,则shared_ptr
也在std
。
问题在于std::tr1
中还有shared_ptr
另一个版本,但是在C ++ 11模式下,您不应使用它:应将其视为已弃用 。
您的解决方案就是删除所有对tr1
使用,并使用这些类的完整C ++ 11版本。
C ++模板错误消息可能很容易阅读。 但是答案在第二音符中。
no known conversion for argument 1 from 'std::shared_ptr<RMMIX::Process>' to 'const value_type& {aka const std::tr1::shared_ptr<RMMIX::Process>&}'
问题是您正在使用std::make_shared
(创建一个std::shared_ptr
)并将其传递到std::tr1::shared_ptr
的向量中。
最简单的解决方案是删除TR1。 TR1的功能是添加C ++ 11支持时编译器实现的一些第一个功能。
std::vector< std::shared_ptr<Process> > procs;
如果您无法停止使用std::tr1::shared_ptr
。 您必须放弃使用make_shared
因为它不是TR1的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.