2012-02-06 120 views
1

不明确的过载我想从Festival项目编译一些C++代码。当我编译Festival,我得到以下错误:'运营商='

static void load_index(DIPHONE_DATABASE *database) 
{ 
    EST_TokenStream ts; 
    int i; 
    EST_String line; 

    if (ts.open(database->index_file) == -1) 
    { 
    cerr << "Diphone: Can't open file " << database->index_file << endl; 
    festival_error(); 
    } 

    for (i=0; (!ts.eof()) && (i<database->ndiphs);) 
    { 
    line = ts.get_upto_eoln(); //this is di_io.cc:111 
    if ((line.length() > 0) && (line[0] != ';')) 
    { 
     EST_TokenStream ls; 
     ls.open_string(line); 
     database->indx[i]->diph = wstrdup(ls.get().string()); 
     database->indx[i]->file = wstrdup(ls.get().string()); 
     database->indx[i]->beg = atof(ls.get().string()); 
     database->indx[i]->mid = atof(ls.get().string()); 
     database->indx[i]->end = atof(ls.get().string()); 
     ls.close(); 
     i++; 
    } 
    } 

    if (i == database->ndiphs) 
    { 
    cerr << "Diphone: too many diphones in DB" << endl; 
    festival_error(); 
    } 

    database->nindex = i; 
    database->ndiphs = i; 

    ts.close(); 
} 

如何才能摆脱上述错误的:

Making in directory ./src ... 
Making in directory src/arch ... 
Making in directory src/arch/festival ... 
Making in directory src/modules ... 
Making in directory src/modules/rxp ... 
Making in directory src/modules/clunits ... 
Making in directory src/modules/clustergen ... 
Making in directory src/modules/MultiSyn ... 
Making in directory src/modules/MultiSyn/inst_tmpl ... 
Making in directory src/modules/hts_engine ... 
Making in directory src/modules/diphone ... 
gcc -c -g -I../include -I../../../src/include -I../../../../speech_tools/include di_io.cc 
di_io.cc: In function ‘void load_index(DIPHONE_DATABASE*)’: 
di_io.cc:111: error: ambiguous overload for ‘operator=’ in ‘line = EST_TokenStream::get_upto_eoln()()’ 
../../../../speech_tools/include/EST_String.h:477: note: candidates are: EST_String& EST_String::operator=(const char*) <near match> 
../../../../speech_tools/include/EST_String.h:479: note:     EST_String& EST_String::operator=(char) <near match> 
../../../../speech_tools/include/EST_String.h:481: note:     EST_String& EST_String::operator=(const EST_String&) <near match> 
make[3]: *** [di_io.o] Error 1 
make[2]: *** [diphone] Error 2 
make[1]: *** [modules] Error 2 
make: *** [src] Error 2 

发生错误的功能?

+0

这是行'di_io.cc:111'? – sbi 2012-02-06 10:48:27

+1

我在猜测它的'line = ts.get_upto_eoln();' – Chip 2012-02-06 10:56:03

+0

@Chip:我也这么认为,但是猜测是愚蠢的。 – sbi 2012-02-06 11:26:54

回答

2

我假设你使用非标准的类型是从speech-tools库,记录在here,因为这是我在搜索类名时发现的。如果这是错误的,请更新问题以表明它们来自哪里。

我还假设错误行(行di_io.cc 111)是一个说:

line = ts.get_upto_eoln(); 

,因为这是唯一一个我可以看到,可能会导致该错误消息;再次,如果它是不同的行,请更新问题。

EST_TokenStream::get_upto_eoln返回EST_Token。您正尝试将其分配给不同类型的变量(EST_String),并且没有隐式转换。

可以使用其string功能转换功能结果EST_String

line = ts.get_upto_eoln().string(); 
+0

对于我在问题中忽略的所有内容,我表示歉意。我想我的鼻子太靠近地面了。这个答案在解决问题方面是一个很好的教训。谢谢! – Sriram 2012-02-06 12:00:11

2

get_upto_eoln返回什么?

您可以在EST_String类中获得operator=的精确过载。

或者,你可以明确地使一个字符串,它像:

line = std::string(ts.get_upto_eoln()); 

而不是

line = ts.get_upto_eoln(); 
+0

谢谢你的回复。 – Sriram 2012-02-06 12:00:47