gpt4 book ai didi

c++ - 二维数组分配期间 calloc 上的 "expression must have (pointer-to) function type"

转载 作者:行者123 更新时间:2023-11-28 07:09:15 27 4
gpt4 key购买 nike

在 VS2010 中,calloc 在以下代码块中以错误“expression must have (pointer-to) function type”突出显示类。放到main()中就没有问题了。没有名为 calloc 的变量。

RoadSegment ***map;

map = (RoadSegment ***) calloc(nRows, sizeof(RoadSegment **));
for( int rCur=0; rCur < nRows; ++rCur )
map[rCur] = (RoadSegment **) calloc(nCols, sizeof(RoadSegment *));

我不明白有什么不同,但为什么错误首先发生在成员函数中。

最佳答案

正如我的评论所预测的那样,事实证明您没有以正确的顺序包含标题。您的实现在 header 中,因此 <cstdlib>需要包含在该 header 之前:

#include <cstdlib>      // Required by myclass.h
#include "myclass.h"

当您有大量源文件需要您的 header 时,这会使事情变得困难 - 每个源文件都必须记住包含其他 header ,即使它们并不直接需要这些 header 。

以下是避免此类问题的一些不同策略:

  • 养成总是在任何本地 header (双引号中的任何内容)之前包含标准 header 和其他库 header (尖括号中的任何内容)的习惯 - 请注意,每个源文件仍然必须记住包含先决条件 header ;或者

  • 如果您的 header 使用了另一个 header 中的内容,请确保您在自己的 header 中包含所需的 header (有时您有相互依赖的 header 并且不能这样做 - 相反,您可以为一个 header 转发声明内容这些标题);或者

  • 使用所有 源文件所需的预编译 header ,并将所有通用 header 放在那里(这是一种懒惰的方法,但对 Microsoft 编译器来说很常见: "stdafx.h" - 当你有非常大的 header 随处使用并且你想减少编译时间时,它有实际用途。

如果您在 header 中实现代码,请确保它是出于正确的原因。如果只是你懒惰,不想把它拆分成一个源文件,那是一个糟糕的理由。如果它是必须在 header 中定义的模板代码,那是一个很好的理由。

关于c++ - 二维数组分配期间 calloc 上的 "expression must have (pointer-to) function type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21272010/

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