我从 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?
如果我没有提供足够的源代码,请发表评论,我会相应地修改这个问题。
更新 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));
}
}