编译时,报函数不匹配错误?求助

jovial__ 2012-02-16 09:14:41
下面定义错了吗? 为什么会报函数不匹配的错误呢?


class SuffTree {
private:
struct SuffTreeNode {
int _SuffLexCount;
map<int, int> _SuffPosCount;
map<int, double> _SuffPosProb;
};
Trie<SuffTreeNode> _SuffLexPosCount;

static Trie<SuffTreeNode> _nullVal;
void AddSuff(string &word, PosFreqMap &PosFreq, Trie<SuffTreeNode>::TrieNode * CurrentPtr);
22: void ComputeProbNode(Trie<SuffTreeNode>::TrieNode * CurrentPtr, map<int, double> &tagprobs, double theta);
23: void WriteTreeNode(Trie<SuffTreeNode>::TrieNode *CurrentPtr, ofstream &output, vector<string> *ptrPosStrVec, string &str);
void InverseProbNode(Trie<SuffTreeNode>::TrieNode * CurrentPtr, UnigramFreqMap &unigrams);
public:
SuffTree(): _SuffLexPosCount(SuffTreeNode()) {}
void AddWord(string &word, PosFreqMap &PosFreq);
void ComputeProb(double theta, UnigramFreqMap &unigrams) {
29: ComputeProbNode(_SuffLexPosCount.GetTrieHead(), map<int, double>(), theta);
InverseProbNode(_SuffLexPosCount.GetTrieHead(), unigrams);
}
void WriteTree(ofstream &output, vector<string> *ptrPosStrVec){
33: WriteTreeNode(_SuffLexPosCount.GetTrieHead(), output, ptrPosStrVec, string());
}
};


SuffModel.h: In member function `void SuffTree::ComputeProb(double, UnigramFreqMap&)':
SuffModel.h:29: error: no matching function for call to `SuffTree::ComputeProbNode(Trie<SuffTree::SuffTreeNode>::TrieNode*, std::map<int, double, std::less<int>, std::allocator<std::pair<const int, double> > >, double&)'
SuffModel.h:22: note: candidates are: void SuffTree::ComputeProbNode(Trie<SuffTree::SuffTreeNode>::TrieNode*, std::map<int, double, std::less<int>, std::allocator<std::pair<const int, double> > >&, double)
SuffModel.h: In member function `void SuffTree::WriteTree(std::ofstream&, std::vector<std::string, std::allocator<std::string> >*)':
SuffModel.h:33: error: no matching function for call to `SuffTree::WriteTreeNode(Trie<SuffTree::SuffTreeNode>::TrieNode*, std::basic_ofstream<char, std::char_traits<char> >&, std::vector<std::string, std::allocator<std::string> >*&, std::string)'
SuffModel.h:23: note: candidates are: void SuffTree::WriteTreeNode(Trie<SuffTree::SuffTreeNode>::TrieNode*, std::ofstream&, std::vector<std::string, std::allocator<std::string> >*, std::string&)
make64: *** [application.o] Error 1
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
merlinfang 2012-02-16
  • 打赏
  • 举报
回复
应该是ComputeProbNode(_SuffLexPosCount.GetTrieHead(), map<int, double>(), theta);
map<int, double>(),的原因,申明一个对象试试
ri_aje 2012-02-16
  • 打赏
  • 举报
回复

void ComputeProbNode(Trie<SuffTreeNode>::TrieNode * CurrentPtr, map<int, double> &tagprobs, double theta);
29: ComputeProbNode(_SuffLexPosCount.GetTrieHead(), map<int, double>(), theta);

这两句不配套。ComputeProbNode 的第二个形参的类型是 map&,而调用端实参的类型是类型为 map 的临时对象,c++ 要求临时对象不能邦定到左值引用上,所以调用失败。你可以改成这样试试。

void ComputeProb(double theta, UnigramFreqMap &unigrams)
{
map<int, double> a_non_temporary_map;
ComputeProbNode(_SuffLexPosCount.GetTrieHead(), a_non_temporary_map, theta);
InverseProbNode(_SuffLexPosCount.GetTrieHead(), unigrams);
}
delphiwcdj 2012-02-16
  • 打赏
  • 举报
回复
最后一个参数,double& 和 double 一样吗

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧