Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++&引用;错误:没有匹配的函数用于调用";当在一组中计数时_C++_Function_Map_Set_Matching - Fatal编程技术网

C++ c++&引用;错误:没有匹配的函数用于调用";当在一组中计数时

C++ c++&引用;错误:没有匹配的函数用于调用";当在一组中计数时,c++,function,map,set,matching,C++,Function,Map,Set,Matching,我正在使用一个集合和一个元组类来实现一个映射,这是我做的一个练习,我不断得到这个错误:error:std::set::count(Tuple&)调用没有匹配的函数。 这是我的代码: template <class K,class V> class Tuple { private: K* mKey; V* mValue; public: Tuple(const K& key, const V& val) {

我正在使用一个集合和一个元组类来实现一个映射,这是我做的一个练习,我不断得到这个错误:
error:std::set::count(Tuple&)调用没有匹配的函数。

这是我的代码:

        template <class K,class V> class Tuple
{
private:
    K* mKey;
    V* mValue;
public:
    Tuple(const K& key, const V& val)
    {
        mKey = &key;
        mValue = &val;
    };

    Tuple(const K& key)
    {
        mKey = &key;
    };
    const K& getKey()
    {
        return *mKey;
    };
    const V& getValue()
    {
        return *mValue;
    };
    void setKey(const K& key)
    {
        mKey=&key;
    };
    void setValue(const V& val)
    {
        mValue=&val;
    };
    bool operator< (Tuple<K,V>& t)
    {
        return *mKey<*t.mKey;
    };
    bool operator== (Tuple<K,V>& t)
    {
        return *mKey==*t.mKey;
    };
};

template <class K,class V> class map
{
private:
    set<Tuple<K,V> >* mTupleMap;

public:
    map()
    {
        mTupleMap = new set<Tuple<K,V> >;
    };

    void insert(const K& key,const V& val)
    {
        Tuple<V,K> tmp(key,val);
        if(mTupleMap->count(tmp)!=0)
        {
            typename set<Tuple<K,V> >::iterator it;
            it=mTupleMap->find(tmp);
            (*it).setValue(val);
        }
        else
        {
            mTupleMap->insert(tmp);
        }
    }
    const V& getValue(const K& key)
    {
        set<V,K> tmp(key);
        if(mTupleMap->count(tmp)!=0)
        {
            typename set<Tuple<K,V> >::iterator it;
            it=mTupleMap->find(tmp);
            return (*it).getValue();
        }
        return NULL;
    }
};

int main()
{
    map<int,char> mapIntToChar;
    mapIntToChar.insert(1,'a');
    mapIntToChar.insert(2,'b');
    mapIntToChar.insert(1,'c');
    cout << mapIntToChar.getValue(1) << endl;

    return 0;
}
模板类元组
{
私人:
K*mKey;
V*m值;
公众:
元组(常量K和key,常量V和val)
{
mKey=&key;
mValue=&val;
};
元组(常量K和键)
{
mKey=&key;
};
常数K&getKey()
{
返回*mKey;
};
常量V&getValue()
{
return*mValue;
};
无效设置键(常数K和键)
{
mKey=&key;
};
无效设置值(常数V&val)
{
mValue=&val;
};
布尔运算符<(元组和t)
{
返回*mKeycount(tmp)!=0)
{
typename集::迭代器;
it=mTupleMap->find(tmp);
(*it).设定值(val);
}
其他的
{
mTupleMap->insert(tmp);
}
}
常量V和getValue(常量K和键)
{
设置tmp(键);
如果(mTupleMap->计数(tmp)!=0)
{
typename集::迭代器;
it=mTupleMap->find(tmp);
return(*it).getValue();
}
返回NULL;
}
};
int main()
{
地图地图;
插入(1,'a');
插入(2,'b');
插入(1,'c');

你的
tmp
元组
,但是你的
集合
包含
元组
,你有
操作符你的
tmp
元组
,但是你的
集合
包含
元组
,你有
操作符你是否包含
字符串.h
字符串
常量也许是ue?这就是include:#include#include#include在元组中存储指针会给晚餐带来麻烦,并告诉它带上所有facebook好友。你的地图条目都无效。@Ofiramov你使用的是
std
,但不包括
string
string.h
?包括它们。你包括了吗de
string.h
string
const
问题可能?这就是include:#include#include#在元组中存储指针会招来麻烦,并告诉它带上所有facebook好友。你的地图条目都无效。@Ofiramov你使用的是
std
,但不包括de>string
string.h
?包括它们..哇,我比我想的更蠢哈哈,谢谢它确实解决了这个问题,但现在它出现了这个错误:“stl_function.h | 237 | error:与'operatoroperator<不匹配,作为输入获取对元组的引用而不是指针,所以我称它的成员为”。“而且解引用不是必须的。不是吗?@OfirAbramov如果你试图比较值,你应该解引用指针。如果地址你不应该解引用。哇,我比我想的更傻哈哈,谢谢它确实解决了这个问题,但现在它犯了这个错误:“stl_function.h | 237 | error:与'operatoroperator<获取元组引用而不是指针作为输入不匹配,因此我用“.”来调用它的成员,并且解引用不是必需的。是不是?@Ofiramov如果您试图比较值,应该解引用指针。如果地址不应该解引用。