) (int*)’ "-6ren"> ) (int*)’ "-我在使用 std::auto_ptr 时遇到问题.我尝试使用 GCC 4.6.1 在 Ubuntu 11.10 上编译以下内容,我收到错误消息 error: no match for call to -6ren">
gpt4 book ai didi

c++ - 初始化 std::auto_ptr: "error: no match for call to ‘(std::auto_ptr) (int*)’ "

转载 作者:行者123 更新时间:2023-11-30 03:02:34 26 4
gpt4 key购买 nike

我在使用 std::auto_ptr 时遇到问题.我尝试使用 GCC 4.6.1 在 Ubuntu 11.10 上编译以下内容,我收到错误消息 error: no match for call to ‘(std::auto_ptr<int>) (int*)’ .

#include <memory>
#include <iostream>

class Toy {

public:
std::auto_ptr<int> foo;

Toy() {
foo(new int(3));
}
};

int main() {

Toy toy;

std::cout << *toy.foo << std::endl;

return 0;
}

我很确定 std::auto_ptr< T >接受 T*作为其构造函数参数,但显然不是...如果这是一个微不足道或重复的问题,我深表歉意,但我搜索了文件,但没有找到答案。像 this 这样的地方似乎建议上面的代码应该工作。无论如何,我们将不胜感激!

最佳答案

要初始化类的字段,您可以使用初始化列表语法:

class Toy  {

public:
std::auto_ptr<int> line;

Toy() : line(new int(3))
{

}
};

否则,您可能会得到默认初始化的并使用其reset方法重新设置它:

class Toy  {

public:
std::auto_ptr<int> line;

Toy()
{
line.reset(new int(3));
}
};

但是这段代码还有更多的问题;首先,new int(3) 不会创建一个包含三个 int 的数组(如我所想),但它会创建一个 int 初始化为 3。您的意思可能是 new int[3]

但是:new int[3] 需要一个delete[] 来释放,但是auto_ptr使用普通的 delete,即它不是用来管理数组的。这是因为标准库提供的管理数组的解决方案是 std::vector,您应该使用它来代替您的自制解决方案,因为 std::vector 实际上具有没有“普通”动态数组的开销。

关于c++ - 初始化 std::auto_ptr: "error: no match for call to ‘(std::auto_ptr<int>) (int*)’ ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10020957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com