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 ++ и т. Д., Очень ценится.