【问题标题】:STL list problem CSTL列表问题C
【发布时间】:2010-12-28 09:38:40
【问题描述】:

我在 c 中有列表指针:

list<int> * pointer = (list<int> *)malloc(sizeof(list<int>));

当我尝试时:

pointer->push_back(1);

我得到错误,因为 malloc 没有调用列表构造函数。我知道在 C++ 中这样做:

list<int> * pointer = new list<int>();

但我在 c 中需要这个?

有人知道解决办法吗?

【问题讨论】:

  • 这毫无意义。 C 甚至没有类或模板。
  • std::list&lt;&gt; 是 C++ 独有的特性,而不是 C。使用 malloc 有点破坏了在内存管理方面拥有标准容器类的意义。如果需要使用std::list&lt;&gt;,则必须使用C++。
  • C中没有办法使用STL
  • 来吧,伙计们:这是一个菜鸟问题,但没有理由用反对票来打击这个家伙,是吗?
  • @Chris:无论如何,在这种情况下,您需要用 C++ 构建包装器。

标签: c++ list pointers stl


【解决方案1】:

不,因为它们是不同的语言。仅仅因为名称中的一个普通字母后面只有文本字符串“++”并不意味着什么——这与尝试在 Python 中使用 Java 容器的功能等效。

如果要使用 STL,则必须使用 C++ 编译器。

【讨论】:

  • 更不用说 C 没有模板,在代码 sn-p 中使用(即使假设它不是 STL)
【解决方案2】:

您还可以使用 new() 的“放置”版本。在 malloc() 分配的一块内存上调用构造函数。

/* allocate memory using malloc */
list<int> * pointer = (list<int> *)malloc(sizeof(list<int>));

/* invoke the C++ constructor using the placement version of new */
pointer = new(pointer) list<int>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多