0

私がg ++から得ているコンパイラエラーは

./Debug_gcc_lin64_5610_ST/tom.o: In function `process_P2T_CUST(IPC*)':
/mxhome/charrison/git/libs/tom.cpp:512: undefined reference to `memorize_block(boost::unordered_map< ... >&, Block const&)'

(エリプシス鉱山)。

未定義の参照を含むソース コード スニペットは次のとおりです。

void
process_P2T_CUST(IPC *client_ipc) {

    // Get list of record types in block                                                                                                 
    Block& block = client_ipc->get_block();
    block.get_record_types(input_record_set);

    // Reset associative memory                                                                                                          
    memory.clear();

    // Add all field=value pairs from P2T_CUST into memory                                                                           
    memorize_block(memory, block);

memorize_block のヘッダー定義は次のとおりです。

void memorize_block(MemoryBank&, Block&);

ここで、エラー メッセージを解釈する方法を示します。リンカ (または実際にはコンパイラ) は、 memorize_block() の必要な署名には parm1 =unordered_map&と parm2 =が必要であると推測しましたBlock const&

しかし、なぜ Block がconstであるべきだと考えるのでしょうか?

十分なソース コードを提供していない場合は、コメントしてください。それに応じてこの質問を修正します。

UPDATE 1 これは、参照と同じコンパイル単位にある memorize_block のコードです。それ以外の定義はどこにもありません。

void
memorize_block(MemoryBank& memory, Block &block) {
    D_RecordType_Vector record_types;
    block.get_record_types(record_types);    
    BOOST_FOREACH(const D_RecordType_Set::value_type& rec_type, record_types) {
            block.traverse_record(rec_type, add_to_memory(memory));
    }
}
4

1 に答える 1