Я клонировал чей-то код C++ из github, но не смог его скомпилировать. Автор сказал мне, что он может успешно запустить его с помощью gcc 4.8.4. Поэтому я установил gcc48 с помощью homebrew
и задал версию gcc
в makefile
, помещенную в его папку с кодом.Не удалось скомпилировать и запустить код C++ с помощью gcc48
Вот настройки в Makefile:
CC=g++-4.8
CFLAGS=-c -pipe -O3
#INCLUDE=-I /home/xh/jianguoyun/my/code/cpp/mylib
MODEL_EXE=bbtm infer
all:$(MODEL_EXE)
bbtm:BurstyBTM.o main.o
$(CC) $^ -o [email protected]
infer:infer.o
$(CC) $^ -o [email protected]
mail.o:BurstyBTM.h
BurstyBTM.o:BurstyBTM.h biterm.h doc.h
infer.o:infer.h doc.h
%.o:%.cpp
$(CC) $(INCLUDE) $(CFLAGS) $< -o [email protected]
clean:
rm -rf *.o $(MODEL_EXE)
Однако, получается ошибка во время компиляции:
g++-4.8 -c -pipe -O3 BurstyBTM.cpp -o BurstyBTM.o
BurstyBTM.cpp: In member function 'Pvec<double> BurstyBTM::compute_pz_b(Biterm&)':
BurstyBTM.cpp:129:23: error: could not convert 'pz.Pvec<T>::normalize<double>(0.0)' from 'void' to 'Pvec<double>'
return pz.normalize();
^
BurstyBTM.cpp: In member function 'void BurstyBTM::save_pz(std::string)':
BurstyBTM.cpp:158:41: error: conversion from 'void' to non-scalar type 'Pvec<double>' requested
Pvec<double> pz = nb_z.normalize(alpha);
^
BurstyBTM.cpp: In member function 'void BurstyBTM::save_pw_z(std::string)':
BurstyBTM.cpp:164:37: error: conversion from 'void' to non-scalar type 'Pmat<double>' requested
Pmat<double> pw_z = nwz.normr(beta);
^
make: *** [BurstyBTM.o] Error 1
Я попытался установить gcc49 и запустить его снова, но и не удалось. Я думаю, это не из-за ошибки кода, поскольку автор сказал, что он мог запустить его без ошибок. Мой os - os x 10.10. Не могли бы вы помочь мне решить эту проблему? Я почти безумно об этом. Заранее спасибо!
РЕДАКТИРОВАТЬ:
Здесь связь с github
А код с ошибками, как показано ниже:
for (int k = 1; k < K + 1; ++k) {
double deno = 2 * nb_z[k] + W * beta;
double pw1k = (nwz[k][w1] + beta)/deno;
double pw2k = (nwz[k][w2] + beta)/(deno + 1);
double pk_t = (nb_z[k] + alpha)/(nb + K * alpha);
pz[k] = eta * pk_t * pw1k * pw2k;
}
return pz.normalize();
}
void BurstyBTM::save_pz(string pt) {
Pvec<double> pz = nb_z.normalize(alpha);
pz.write(pt);
}
void BurstyBTM::save_pw_z(string pt) {
Pmat<double> pw_z = nwz.normr(beta);
pw_z.write(pt);
}
Публикация содержимого файла makefile, но не кода! Как кто-нибудь может помочь вам понять, что случилось? –
Нам нужно увидеть код. Что такое 'beta' или' alpha'? Являются ли они 'Pvec'? –
huu
Я думаю, что из ваших сообщений об ошибках вполне возможно, что ошибка заключается в методах в «BurstyBTM.cpp». Он не имеет отношения к Makefile. –