2016-02-17 2 views
0

Я клонировал чей-то код 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); 
} 
+1

Публикация содержимого файла makefile, но не кода! Как кто-нибудь может помочь вам понять, что случилось? –

+1

Нам нужно увидеть код. Что такое 'beta' или' alpha'? Являются ли они 'Pvec '? – huu

+1

Я думаю, что из ваших сообщений об ошибках вполне возможно, что ошибка заключается в методах в «BurstyBTM.cpp». Он не имеет отношения к Makefile. –

ответ

0

По крайней мере, первая ошибка BurstyBTM.cpp: 129: 23, действительно ошибка кодирования и компилятор прав - в pvec.h Pvec :: normalize определяется как void как возвращаемый тип.

Не проверял другие, но я полагаю, что это такая же ошибка, и мне интересно, как автор даже сумел ее скомпилировать (она определенно не будет компилироваться с g ++ и MSVC).

+0

Не только автор сказал, что он может быть запущен успешно. Другой парень сказал, что он может запустить его в Linux без ошибок. Я использую os x 10.10. –

Смежные вопросы