我是C++的新手,在C語言中有一些經驗,並且學習它我在做作業的時候測試了一些東西。現在,我有C++ rand不適用於屬性初始值設定程序
#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;
}
從這段代碼,我可以說
- 我讀了時間(0)可能改變了一些成績,但並沒有改變什麼。
- 是的,我想獲得實例化時,許多對象來創建它的對象載體,以初始化所有MAX_OBJS元素X屬性與價值ñ的載體。
- 我試圖讓一些代碼找到一個給定的元素,在這種情況下,最後一個,在一些向量(在這種情況下,在相同的元素是)。我試了幾件事情,如找到和find_if,沒有成功。
我想一些建議/我的問題,這是
- A線)打印幫助相同數量(隨機一個)MAX_OBJS次
- 我不知道比我更好的方法來比較對象B)
- C)從不打印出「找到!」
發現不起作用,即使@Nawaz建議。編譯器說:
/usr/include/c++/4.5/bits/stl_algo.h: In function ‘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: instantiated from ‘_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator >, _Tp = Object]’
../src/Many.cpp:48:74: instantiated from here
/usr/include/c++/4.5/bits/stl_algo.h:158:4: error: no match for ‘operator==’ in ‘_first._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: instantiated from ‘_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator >, _Tp = Object]’
../src/Many.cpp:48:74: instantiated from here
/usr/include/c++/4.5/bits/stl_algo.h:162:4: error: no match for ‘operator==’ in ‘_first._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: error: no match for ‘operator==’ in ‘_first._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: error: no match for ‘operator==’ in ‘_first._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: error: no match for ‘operator==’ in ‘_first._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: error: no match for ‘operator==’ in ‘_first._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: error: no match for ‘operator==’ in ‘_first._gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* with _Iterator = Object*, _Container = std::vector, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = Object& == __val’
謝謝!
您的代碼無法編譯。 – 2011-04-09 07:14:42
你確定你在這裏準確地複製了你的代碼嗎?它看起來不像應該編譯。舉個例子,在'Many'中,你同時使用'MAX_OBJS'和'objs',但是我沒有看到任何一個定義。同樣在main中,你定義'i',但從來沒有使用它,但是使用'j'而沒有定義它。您還使用'rand'作爲Object中的數據成員和函數,這在最好的情況下是令人困惑的。 – 2011-04-09 07:16:13
這不是我原來的代碼,至少是這個的三倍。我認爲人們可以理解宏的抽象概念,用「objs」表示「obj_list」(疲勞失敗)。我會解決這個問題。 – paulochf 2011-04-09 17:45:09