声明问题-C ++

时间:2018-10-01 11:24:12

标签: c++ gsl

TL; DR-从github自述文件中获得一些如何使用C ++代码的说明(请参阅下文),由于我从未做过C ++,因此我正在努力实现它们。

所以首先要先做;我是一名具有python良好背景的理科学生。我需要使用一些用C ++编写的代码(我以前从未使用过C ++)。在过去的几天里,我一直在疯狂地搜寻,以便弄清楚如何使用代码。但是,如果我到处都犯了愚蠢的pythonic错误,请原谅。 github给出了以下指示:

“要在C ++程序中为单个统计上同质的网络生成邻接矩阵,请包含头文件secorder_rec_1p.hpp并以secorder_rec_1p的身份调用

    gsl_matrix *W = secorder_rec_1p(N_nodes, p, alpha_recip, alpha_conv,alpha_div, cc_chain, rng);

其中N_nodes是网络中的节点数,rng是指向已初始化的gsl随机数生成器的指针。 W是一个邻接矩阵,如果从节点j到节点i有连接,则W_ij = 1,否则为零。”

对于以前从未做过C ++的人来说,一开始就相当混乱。经过大量的搜索等工作之后,现在变得更加混乱了,我有一个.c文件,我希望可以解决这个问题。不幸的是,这给了我一个我有点理解但不知道如何解决的错误。

所以我的代码是:

    #include "secorder_rec_1p.hpp"
    #include <time.h>
    #include <gsl/gsl_rng.h>
    using namespace std;

    extern int N;
    extern double p, recip, conv, divg, chain;

    int main (){
        int N;
        N = 1000;
        gsl_rng * rng = gsl_rng_alloc(gsl_rng_taus); //I'm not really sure what it does but I don't get any mention of this in the errors so I think it's ok. Not entirely sure if this is a "pointer to an initialized gsl random num generator"


        double p, recip, conv, divg, chain;
        recip = 0.1;
        p = 0.1;
        conv = 0.1;
        divg = 0.1;
        chain = 0.1;

        int W [N][N];
        int i,j;
        double result = rand()/ RAND_MAX;
        for(i=0; i<N; i++)
            for(j=0; j<N; j++)
            {
                if(result > p){
                    W [i][j] = 1;
                } else {
                    W[i][j] = 0;
                }

            }

        gsl_matrix *W = secorder_rec_1p(N, p, recip, conv, divg, chain, rng);
    }

当我尝试“制作” .c文件时,我收到一个声明错误(这是正确的编译吗?在实际运行脚本之前,我需要这样做吗?)。该错误引用了与我的W的声明冲突。

我的(显然是错误的)理解是,我正在创建一个N x N的数组(矩阵?),其中填充了1s和0s,其中元素M_ij为1,概率为p,否则为0。

然后这就是我的理解力下降的地方,但是* W表示它指向带有W标记的事物,因此应该是我的矩阵和gsl_matrix,等于该函数的输出。我不确定在这种情况下,equals是什么意思,因为它应该生成一个新的矩阵。因此,如果这是python,我希望新矩阵的名称位于equals的左侧,而右侧则是用于生成该矩阵的代码。我不知道这是怎么回事。

对于我的错误以及有关c ++的工作方式等方面的任何帮助,我们将不胜感激。

0 个答案:

没有答案