[英]C++ rand doesn't work with attribute initializer
我是C语言的新手,有一些C语言的经验,为了学习它我在做作业的同时测试了一些东西。 我现在有
#define MAX_OBJS 4
using namespace std;
class Object {
public:
int x, rand;
Object(int y) {
x = y;
rand = rand() % 5;
};
};
class Many {
public:
vector<Object> obj_list;
Many(int n): obj_list (MAX_OBJS, n) {}
};
int main() {
srand(time(NULL));
Many many(42);
cout << "Example: looking for " << many.obj_list.back().rand "\n";
vector<Object>::iterator j;
Object t = many.obj_list.back();
for (j = many.obj_list.begin(); j != many.obj_list.end(); j++) {
/*A*/ cout << j->rand << "\n";
/*B*/ if (&(*j) == &t)
/*C*/ cout << "Found!" << "\n";
}
return EXIT_SUCCESS;
}
从这段代码中,我可以说
我想对我的问题提出一些建议/帮助
即使有@Nawaz建议, 发现也行不通。 编译说:
/usr/include/c++/4.5/bits/stl_algo.h:在函数' RandomAccessIterator std :: _find(_RandomAccessIterator,_RandomAccessIterator,const _Tp&,std :: random_access_iterator_tag)[with _RandomAccessIterator = __gnu_cxx :: __ normal_iterator>,_Tp = Object] “:
/usr/include/c++/4.5/bits/stl_algo.h:4209:45:从'_IIter std :: find(_IIter,_IIter,const _Tp&)[与_IIter = __gnu_cxx :: __ normal_iterator>,_Tp = Object]实例化
../src/Many.cpp:48:74:从这里实例化
/usr/include/c++/4.5/bits/stl_algo.h:158:4:错误:'_ first '中的'operator =='不匹配。 _gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator * with _Iterator = Object *,_ Container = std :: vector,__ gn_cxx :: __ normal_iterator <_Iterator,_Container> :: reference = Object&== __val'
/usr/include/c++/4.5/bits/stl_algo.h:4209:45:从'_IIter std :: find(_IIter,_IIter,const _Tp&)[与_IIter = __gnu_cxx :: __ normal_iterator>,_Tp = Object]实例化
../src/Many.cpp:48:74:从这里实例化
/usr/include/c++/4.5/bits/stl_algo.h:162:4:错误:'_ first '中的'operator =='不匹配。 _gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator * with _Iterator = Object *,_ Container = std :: vector,__ gn_cxx :: __ normal_iterator <_Iterator,_Container> :: reference = Object&== __val'
/usr/include/c++/4.5/bits/stl_algo.h:166:4:错误:'_ first '中的'operator =='不匹配。 _gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator * with _Iterator = Object *,_ Container = std :: vector,__ gn_cxx :: __ normal_iterator <_Iterator,_Container> :: reference = Object&== __val'
/usr/include/c++/4.5/bits/stl_algo.h:170:4:错误:'_ first '中的'operator =='不匹配。 _gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator * with _Iterator = Object *,_ Container = std :: vector,__ gn_cxx :: __ normal_iterator <_Iterator,_Container> :: reference = Object&== __val'
/usr/include/c++/4.5/bits/stl_algo.h:178:4:错误:'_ first '中的'operator =='不匹配。 _gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator * with _Iterator = Object *,_ Container = std :: vector,__ gn_cxx :: __ normal_iterator <_Iterator,_Container> :: reference = Object&== __val'
/usr/include/c++/4.5/bits/stl_algo.h:182:4:错误:'_ first '中的'operator =='不匹配。 _gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator * with _Iterator = Object *,_ Container = std :: vector,__ gn_cxx :: __ normal_iterator <_Iterator,_Container> :: reference = Object&== __val'
/usr/include/c++/4.5/bits/stl_algo.h:186:4:错误:'_ first '中的'operator =='不匹配。 _gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator * with _Iterator = Object *,_ Container = std :: vector,__ gn_cxx :: __ normal_iterator <_Iterator,_Container> :: reference = Object&== __val'
谢谢!
if (&(*j) == &t)
您正在比较上述if
条件中对象的地址。 但是以下行生成了原始对象的副本:
Object t = many.obj_list.back();
复制意味着t
与列表中的对象不同。 因此,您的程序永远不会打印Found!
。
我想你需要把它写成:
Object & t = many.obj_list.back();
// ^ note this!
它存储对象的引用。 它不会在obj_list
复制原始对象。
顺便问一下,为什么不使用<algorithm>
头文件中的std::find
?
#include <algorithm>
std::vector<Object>::iterator it = std::find(many.obj_list.begin(), many.obj_list.end(), t)
if ( it != many.obj_list.end())
std::cout << "Found!"<< std::endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.