使用g ++时出错:在此范围内未声明'malloc'

时间:2012-07-11 03:31:42

标签: c++ namespaces g++ malloc

我正在练习g ++来编译我的代码,但错误“malloc未在此范围内声明”在一开始就不断涌现。与此错误相关的代码片段如下所示:

/*------Basic.h--------*/
using namespace std;

/*------A.h------------*/
class A{
 private:
  double* _data;
 public:
 A(int N);
}

/*------A.cpp----------*/
A::A(int N){
  _data=(double*)malloc(N*sizeof(double));
}

当我使用Microsoft Virtual Stdio时,这个问题永远不会出现。因此我尝试添加一行

#include <stdlib.h>

到Basic.h,错误消失。现在我想知道为什么会发生这种事情。有没有“namespace std”已经包含stdlib.h?非常感谢。

4 个答案:

答案 0 :(得分:3)

命名空间和包含文件是两个完全不同的东西。你需要

#include <stdlib.h>

或等同地

#include <cstdlib>

以便访问该头文件中的声明。

您的使用声明

using namespace std;
另一方面,

意味着您可以使用属于命名空间std的标识符,即在

中声明的标识符
namespace std {
  /*...*/
}

每次都没有预先 std::

例如,如果您include <string>,则可以使用数据类型std::string,但如果您添加using namespace std; ,您可以将该数据类型简单地用作string

但请注意,malloc未在任何命名空间中定义,因此为了使用它,您只需要包含stdlib.h

注意有关stdlib.hcstdlib之间的区别,请参阅here

答案 1 :(得分:2)

malloc()<cstdlib>中定义,因此您必须将其包含在文件的顶部。

using namespace std;只是告诉编译你正在使用那个特定的命名空间,并且没有任何内容包括任何库方法。

在任何情况下,使用C ++时,您确实应该使用new而不是malloc进行动态分配。

答案 2 :(得分:1)

using namespace std;告诉编译器,我正在“使用”std命名空间,所以假装我在std命名空间中进行查找并且不要让我每次都说std::

麻烦的是, {/ 1}}命名空间中还没有

您需要std声明#include的标头。

即使这样,它也是全球性的 - 而不是malloc

答案 3 :(得分:0)

使用'new'进行内存分配。 'using namespace std'与stdlib.h无关 如果您仍想使用malloc(),请在顶部添加

#include<cstdlib>
祝你好运!