使用igraph C库生成具有幂律度分布的网络时的"excess elements in scalar initializer"



我正在使用 igraph C 库,我想生成一个无向、无环和具有幂律度分布的单边网络。我拥有的参数是:

  • 节点数 = 25,000
  • 边数 = 25,000
  • alpha = 2.16104

我想使用igraph_static_power_law_game图形生成器,我编写了以下代码。

#include <igraph.h>
int main() {
  igraph_t g;
  int igraph_static_power_law_game(&g, 25000, 25000, 2.16104, -1, 0, 0, 1);
  igraph_destroy(&g);
  return 0;
}

我使用以下命令编译代码。

gcc testpw.cpp -I/usr/local/Cellar/igraph/0.7.1/include/igraph -L/usr/local/Cellar/igraph/0.7.1/lib -ligraph -o testpw

并出现了以下错误。

error: excess elements in scalar initializer
  int igraph_static_power_law_game(&g, 25000, 25000, 2.16104, -1, 0, 0, 1);
      ^                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

由于我找不到使用 igraph C 库在线生成幂律度网络的示例,我不知道有什么方法可以做到这一点。我在这里做错了什么吗?

如果你正在编译 C 代码,你不需要igraph_static_power_law_game()之前的int,因为这会使该行看起来像是函数的错误声明,而不是函数的调用。

或者,如果您正在编译C++代码,编译器会将括号的内容解释为变量igraph_static_power_law_game的初始值设定项,并抱怨单个int变量不需要多个初始值设定项。

无论哪种方式,写作:

igraph_static_power_law_game(&g, 25000, 25000, 2.16104, -1, 0, 0, 1);

修复了即时编译错误。 您可能应该使用以下内容:

if (igraph_static_power_law_game(&g, 25000, 25000, 2.16104, -1, 0, 0, 1) != 0)
    …report error…

这样,如果函数失败,您就会知道它。