【问题标题】:building a mixed c/c++ code构建混合 c/c++ 代码
【发布时间】:2013-02-07 16:57:44
【问题描述】:

我有一个.cc 文件,它同时使用了iostreammalloc。我怎样才能编译它?使用g++,它说

 error: 'malloc' was not declared in this scope

使用gcc,它说

 fatal error: iostream: No such file or directory

源码位于http://sequitur.info/sequitur_simple.cc

更新

我将malloc 更改为new 并将free 更改为delete。我仍然有很多错误。例如

 /usr/include/c++/4.6/new:103:14: error:   initializing argument 2 of âvoid* operator new(std::size_t, void*)â [-fpermissive]

【问题讨论】:

  • 您必须#include 相应的文件。
  • malloc 是有效的 c++
  • 你能构建源代码吗?
  • @KarthikT,但混合起来不是一个好主意
  • 是的 #includeing <stdlib.h> 有帮助,也可以使用 <string.h>,因为您正在使用 memset()。我编译了做那些模组的代码。

标签: c++ c


【解决方案1】:

包括<stdlib.h> 或包括<cstdlib> 并将malloc 更改为std::malloc - 使用g++ 编译。包含<cstdlib> 是新 C++ 代码的首选方式,“name.h”样式在 C++ 中已弃用。

虽然这会解决您的问题,但迁移到 new/delete 可能是一个更好的主意,以更一致地使用 C++。

【讨论】:

  • @mahmood 刚刚注意到,它不包含 stdlib,这就是这里的问题。
  • @JoshPetitt 问题是如何编译,这回答了它。没有理由拒绝投票,如果您想提倡新/删除,也欢迎您回答。..
  • @KarthikT,它可能会回答它,但它不是“正确”的答案,请删除 .h 包含并仅显示 ,我将删除反对票。
  • @JoshPetitt 这是一个有效的修复程序,为了完整起见,我宁愿保留它,特别是因为使用 using namespace std; 语句,两者几乎相同。除非你能给出具体的理由。我已经为我的答案添加了指导方针。
  • @KarthikT 我不知道 gcc 是否重要,但 MSVC++ 确实重要,如果您同时使用两者,链接到标准库时会出现问题。 (可能是使用 MSVC++ 的坏例子,因为它并不能很好地支持 C)why do some includes need the h and others do not
【解决方案2】:

您是否尝试过包含

#include <stdio.h>      
#include <stdlib.h>   

并使用 g++?

【讨论】:

    【解决方案3】:

    在 C++ 代码中使用 new 和 delete。不要混用 new 和 malloc。从您发布的代码来看,AFAIK 没有任何理由您不能使用 new 和 delete

    【讨论】:

    • 是的,在 C++ 代码中更喜欢 new/delete,但是混合使用 newmalloc 是完全有效的,不会混淆内存管理器,并且在某些边缘情况下可能是可取的.
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多