【问题标题】:"excess elements in scalar initializer" when using igraph C library to generate a network with power law degree distribution使用 igraph C 库生成具有幂律度分布的网络时的“标量初始化程序中的多余元素”
【发布时间】:2015-05-15 11:50:33
【问题描述】:

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

  • 节点数 = 25,000
  • 边数 = 25,000
  • 阿尔法 = 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++ c igraph


    【解决方案1】:

    如果您正在编译 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…
    

    这样如果函数失败了,你就知道了。

    【讨论】:

    • 乔纳森,非常感谢,这正是我错过的。也感谢您对测试设置的建议!非常感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多