大家好,我在成员函数中有以下内容
int tt = 6;
vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt];
set<int>& egressCandidateStops = temp.at(dest);
Run Code Online (Sandbox Code Playgroud)
以及成员变量的以下声明
map<int, vector<set<int>>> m_egressCandidatesByDestAndOtMode;
Run Code Online (Sandbox Code Playgroud)
但编译时遇到错误(英特尔编译器11.0)
1>C:\projects\svn\bdk\Source\ZenithAssignment\src\Iteration\PtBranchAndBoundIterationOriginRunner.cpp(85): error: no operator "[]" matches these operands
1> operand types are: const std::map<int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>, std::less<int>, std::allocator<std::pair<const int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>>>> [ const int ]
1> vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt];
1> ^
Run Code Online (Sandbox Code Playgroud)
我知道它必须是愚蠢的,但我看不出我做错了什么.
UPDATE我从const成员函数调用它,这就是为什么成员变量的类型是const所以我认为类似下面的内容应该修复它:
int dest = 0, tt = 6;
const set<int>& egressCandidateStops = m_egressCandidatesByDestAndOtMode[tt].at(dest);
Run Code Online (Sandbox Code Playgroud)
但没有骰子......仍然是同样的错误.
原型[]是
data_type& operator[](const key_type& k)
Run Code Online (Sandbox Code Playgroud)
即一个非const操作,所以你不能在const成员函数的成员上调用它.
您可以将代码更改为:
std::map<...>::const_iterator where = m_egressCandidatesByDestAndOtMode.find(tt);
if (egressCandidatesByDestAndOtMode.end() != where) {
const vector<set<int>>& temp = where->second;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6682 次 |
| 最近记录: |