【发布时间】:2011-08-01 23:40:28
【问题描述】:
我是 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;
}
从这段代码,我可以说
- 我读到 time(0) 可以改变一些结果,但并没有改变什么。
- 是的,我想要一个 Many 对象在实例化时创建它的 Object 向量,该向量将其所有 MAX_OBJS 元素 x 属性初始化为值 n。
- 我试图编写一些代码来查找给定元素,在本例中为最后一个元素,在某个向量中(在本例中,与元素所在的位置相同)。我尝试了一些类似 find 和 find_if 的方法,但没有成功。
我想要一些关于我的问题的建议/帮助,这些是
- A 行)打印相同的数字(随机数)MAX_OBJS 次
- 我不知道比 B) 中更好的方法来比较对象
- C 行)从不打印“找到!”
find 不起作用,即使有@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&) [with _IIter = __gnu_cxx::__normal_iterator >, _Tp =对象]'
../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, __gnu_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&) [with _IIter = __gnu_cxx::__normal_iterator >, _Tp =对象]'
../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, __gnu_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, __gnu_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, __gnu_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, __gnu_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, __gnu_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, __gnu_cxx::__normal_iterator<_iterator _container>::reference = Object& == __val'
谢谢!
【问题讨论】:
-
你确定你在这里准确地复制了你的代码吗?它看起来根本不应该编译。例如,在
Many中,您同时使用MAX_OBJS和objs,但我没有看到两者的定义。同样,在 main 中,您定义了i但似乎从未使用它,但使用j却从未定义它。您还使用rand作为 Object 内部的数据成员和函数,这充其量是令人困惑的。 -
这不是我的原始代码,至少是这个代码的三倍。我认为人们可以理解宏的抽象,而“objs”是指“obj_list”(疲劳失败)。我会解决的。
标签: c++ pointers random vector constructor