gpt4 book ai didi

c++ - 将类插入 STL 映射时出现“没有匹配的调用函数”错误

转载 作者:可可西里 更新时间:2023-11-01 16:37:42 26 4
gpt4 key购买 nike

我在 C++ 中有一个 STL 映射,其中键是一个无符号整数,值是一个类,其构造函数是:

Foo::Foo(unsigned int integerValue){
//Some stuff
}

在其他类(class)中,我在标题处声明了 std::map:

private:
std::map<unsigned int, Foo> *m_mapFoo;

我在 cpp 文件中创建了它并插入了 Foo 的实例:

m_mapFoo = new std::map<unsigned int, Foo>;
m_mapFoo->insert(0, new Foo(0));
m_mapFoo->insert(1, new Foo(1));

但是我在插入方法中遇到了以下错误:

no matching function for call to ‘std::map<unsigned int, Foo, std::less<unsigned int>, std::allocator<std::pair<const unsigned int, Foo> > >::insert(const unsigned int&, Foo*)’

find 方法中的类似问题:

m_mapFoo.find(0)->second->someFunctionIntoFooClass();

错误正是下面的地方:

request for member ‘find’ in ‘((Foo*)this)->Foo::m_mapGeoDataProcess’, which is of non-class type ‘std::map<unsigned int, Foo, std::less<unsigned int>, std::allocator<std::pair<const unsigned int, Foo> > >*’

附加说明:我没有 Foo 复制构造函数,但我认为这不是问题所在。

对理解这个错误有什么帮助吗?

最佳答案

您有一个指向包含 Foo 值的 map 的指针

std::map<unsigned int, Foo> *m_mapFoo;

并且您将其视为包含 Foo 指针值:

std::map<unsigned int, Foo*> *m_mapFoo;

试试这个:

m_mapFoo = new std::map<unsigned int, Foo>;
m_mapFoo->insert(std::make_pair(0, Foo(0)));
m_mapFoo->insert(std::make_pair(1, Foo(1)));

至于第二个错误,你有一个指向 map 的指针,所以你需要

std::map<unsigned int, Foo>::iterator it = m_mapFoo->find(0);
if (it) {
it->second.someFunctionIntoFooClass();
} else {
// entry not found
}

关于c++ - 将类插入 STL 映射时出现“没有匹配的调用函数”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13475807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com