目前,我在尝试在vector. 我定义了一个vector, tests, 集来包含我自己的结构Test。它包含两个变量,one和two。两者都是 的实例Test。
Test不多,它只包含一个int和char。
我定义了一个宏,用于查找对象的实例是否在给定中vector。
当我尝试编译我的代码时,会导致此错误:
In file included from /usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/bits/stl_algobase.h:71,
from /usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/bits/char_traits.h:39,
from /usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/ios:40,
from /usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/ostream:38,
from /usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/iostream:39,
from test.cpp:1:
/usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/bits/predefined_ops.h: In instantiation of 'bool __gnu_cxx::__ops::_Iter_equals_val<_Value>::operator()(_Iterator) [with _Iterator = __gnu_cxx::__normal_iterator<Test*, std::vector<Test> >; _Value = const Test]':
/usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/bits/stl_algobase.h:1932:14: required from '_RandomAccessIterator std::__find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Test*, std::vector<Test> >; _Predicate = __gnu_cxx::__ops::_Iter_equals_val<const Test>]'
/usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/bits/stl_algobase.h:1977:23: required from '_Iterator std::__find_if(_Iterator, _Iterator, _Predicate) [with _Iterator = __gnu_cxx::__normal_iterator<Test*, std::vector<Test> >; _Predicate = __gnu_cxx::__ops::_Iter_equals_val<const Test>]'
/usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/bits/stl_algo.h:3902:28: required from '_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator<Test*, std::vector<Test> >; _Tp = Test]'
test.cpp:19:6: required from here
/usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/bits/predefined_ops.h:268:17: error: no match for 'operator==' (operand types are 'Test' and 'const Test')
268 | { return *__it == _M_value; }
|
Run Code Online (Sandbox Code Playgroud)
我发现有趣的是,我正在检查的变量被认为是常量,即使在我定义它时,它也不是。
源代码:
#include <iostream>
#include <vector>
#include <algorithm>
#define isin(one, two) (std::find(one.begin(), one.end(), two) != one.end())
struct Test {
int one;
char two;
};
int main() {
Test one = { 6, 'n' };
Test two = { 9, 'r' };
std::vector<Test> tests = { one, two };
if (isin(tests, one)) {
std::cout << "one is in tests\n";
} else {
std::cout << "one is not in tests\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么被one认为是常数?我是不是不小心做错了什么?
Run Code Online (Sandbox Code Playgroud)error: no match for 'operator==' (operand types are 'Test' and 'const Test')
您没有为 定义相等运算符Test。您需要定义operator==以便它知道如何检查两个实例是否相等。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |