Проблемы с декларацией - C ++ - PullRequest
0 голосов
/ 01 октября 2018

TL; DR - есть несколько инструкций о том, как использовать некоторый код C ++ из readme-файла github (см. Ниже), и я изо всех сил пытаюсь реализовать их, как никогда ранее не делал C ++.

Итак, сначалавещи в первую очередь;Я студент естественных наук с хорошим опытом в Python.Мне нужно использовать некоторый код, написанный на C ++ (я никогда раньше не использовал C ++).За последние несколько дней я гуглил как сумасшедший, чтобы понять, как использовать код.Тем не менее, извините, если я везде делал глупые ошибки с питоном.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 - матрица смежности, где W_ij = 1, если есть соединение от узла j к узлу i и в противном случае равно нулю. "

Для кого-то, кто никогда раньше не занимался С ++, это сначала было довольно странно.После долгих поисков и т. Д. Теперь все становится менее запутанным, и у меня есть файл .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 by N (матрица?), Который заполнен единицами и 0, где элемент M_ij равен 1 свероятность p и 0 в противном случае.

Тогда это то место, где мое понимание немного расходится, но * W означает, что оно указывает на вещь, помеченную W, так что это должна быть моя матрица и gsl_matrix, равныевывод этой функции.Я не уверен, что означает равенство в этом случае, потому что он должен генерировать новую матрицу.Поэтому, если бы это был python, я бы ожидал, что имя моей новой матрицы будет слева от равенства, а материал справа - код, используемый для его генерации.Я не уверен, что здесь происходит.

Любая помощь с моей ошибкой, а также информация о том, как работает c ++ и т. Д., Очень ценится.

...