簡體   English   中英

無法使用gcc48編譯和運行C ++代碼

[英]Fail to compile and run the c++ code with gcc48

我已經從github克隆了某人的c ++代碼,但未能編譯它。 作者告訴我,他可以使用gcc 4.8.4成功運行它。 因此,我使用homebrew安裝了gcc48,並在放置在其代碼文件夾中的makefile指定了gcc的版本。

這是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 $@

infer:infer.o
    $(CC) $^ -o $@

mail.o:BurstyBTM.h
BurstyBTM.o:BurstyBTM.h biterm.h doc.h
infer.o:infer.h doc.h

%.o:%.cpp
    $(CC) $(INCLUDE) $(CFLAGS) $< -o $@ 

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 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);
}

至少第一個錯誤BurstyBTM.cpp:129:23確實是編碼錯誤,並且編譯器是正確的-在pvec.h中,將Pvec :: normalize定義為void作為返回類型。

沒有檢查其他錯誤,但是我想這是同一種錯誤,我想知道作者是如何設法編譯它的(它肯定不會用g ++和MSVC編譯)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM