c++ - make_shared 创建 std::shared_ptr?海湾合作委员会 4.6.2

标签 c++ c++11 shared-ptr gcc4 make-shared

我正在使用 gcc 4.6.2。

我正在尝试在 vector 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 或类似的。但如果你这样做,那么 shared_ptr 也在 std 中。

问题是 std::tr1 中有另一个版本的 shared_ptr,但在 C++11 模式下你不应该使用它:它应该被考虑已弃用

您的解决方案是简单地删除对 tr1 的所有使用,并使用这些类的完整 C++11 版本。

关于c++ - make_shared 创建 std::shared_ptr?海湾合作委员会 4.6.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8398540/

相关文章:

c++ - 在即将到来的 c++0x 标准下,我们可以通过这种语法将数组作为参数传递给函数吗?

c++ - <mutex> 和 <condition_variable> 的异常处理

c++ - 具有模板参数取决于参数列表

c++ - "Converting"从 int[] 到 fread 的 std::array?

c++ - std::auto_ptr 或 boost::shared_ptr 用于 pImpl 成语?

c++ - 使用 shared_ptr 时出现段错误

c++ - 使用值为 std::shared_ptr 的映射是否是具有多索引类列表的良好设计选择?

c++ - 使用 Perlin 噪音来制造闪电?

c++ - 在 iPhone xcode 应用程序中,是否可以声明具有全局范围的指针?

c++ - 检查两个模板模板参数是否相同