gpt4 book ai didi

c++ - 传递一些东西作为这个参数丢弃限定符

转载 作者:行者123 更新时间:2023-11-28 02:25:10 25 4
gpt4 key购买 nike

使用下面的代码,我得到以下编译错误:

In static member function ‘static std::string ctedata::Record::getDispatcher<std::basic_string<char> >::impl(const ctedata::Record&, const string&)’:
/home/jason/CrownTheEmpire/lib/ctedata/data.h:111:38: error: passing ‘const std::map<std::basic_string<char>, std::basic_string<char> >’ as ‘this’ argument discards qualifiers [-fpermissive]
return rec.fieldValues_[field];
^
In file included from /usr/include/c++/5.1.0/map:61:0,
from /usr/include/cppconn/connection.h:30,
from /usr/include/cppconn/driver.h:30,
from /home/jason/CrownTheEmpire/lib/ctedata/data.h:6,
from /home/jason/CrownTheEmpire/lib/ctedata/data.cc:3:
/usr/include/c++/5.1.0/bits/stl_map.h:471:7: note: in call to ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::basic_string<char>; _Tp = std::basic_string<char>; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::basic_string<char> > >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = std::basic_string<char>; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = std::basic_string<char>]’
operator[](const key_type& __k)
^

class Record
{
public:
Record() {
isNew_ = true;
}
Record(sql::ResultSet *resultSet) : resultSet_(resultSet) {
isNew_ = false;
}

void loadData();
virtual void init() = 0;

bool isNew() { return isNew_; }
void setValue(const std::string& field, const std::string& value);
template<typename T>
T getValue(const std::string& field) const {
return Record::getDispatcher<T>::impl(*this, field);
}
protected:
sql::ResultSet* resultSet_;
bool isNew_;
std::map<std::string, DataTypes> fieldDataTypes_;
std::map<std::string, std::string> fieldValues_;
private:
template<typename T>
struct getDispatcher;
};

template<>
struct Record::getDispatcher<std::string> {
static std::string impl(Record const& rec, std::string& const field) {
return rec.fieldValues_[field];
}
};

template<>
struct Record::getDispatcher<int> {
static int impl(Record const& rec, const std::string& field) {
return 0;
}
};

我认为我做的事情是正确的,但仍然出现我无法弄清楚的错误。谁能看到我哪里出错了?谢谢。

最佳答案

没有 std::mapoperator[]const,你必须使用 at查找:

template<>
struct Record::getDispatcher<std::string> {
static std::string impl(Record const& rec, std::string& const field) {
return rec.fieldValues_.at(field); // throw if field is not in map.
}
};

template<>
struct Record::getDispatcher<std::string> {
static std::string impl(Record const& rec, std::string& const field) {
auto it = rec.fieldValues_.find(field);
if (it == rec.fieldValues_.end()) {
// not found.
// Manage the case, return default value or throw.
} else {
return it->second;
}
}
};

关于c++ - 传递一些东西作为这个参数丢弃限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985449/

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