저는 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;
}
을 가지고, 내가 시간 (0)이 어떤 결과를 바꿀 수 있음을 읽을 수는 있지만 아무 것도 변경하지 않았다
- 말할 수 있습니다.
- 그래, 나는 그것의 MAX_OBJS 요소 값 N와 X 속성을 모두 초기화 벡터를 인스턴스화 할 때 많은 개체가 해당 개체 벡터를 만들 수 싶습니다.
- 주어진 코드를 만들려고했는데,이 코드에서는 마지막 요소를 찾을 수 있습니다 (이 경우에는 요소가있는 코드와 같음). 나는 과 같은 몇 가지 시도를과 find_if으로 성공하지 못했습니다.
내가
- 라인 A) 인쇄되어 내 문제에 도움/조언을 부탁 같은 번호 (임의의 하나) MAX_OBJS 시간 가
- 난 몰라 내가 B에서했던 것보다 객체를 비교하는 더 좋은 방법.
- 라인 C) "Found!"
찾을도 @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’
감사합니다!
코드가 컴파일되지 않습니다. –
여기에 코드를 정확하게 복사 했습니까? 그것은 마치 컴파일해야하는 것처럼 보이지 않습니다. 예를 들어,'Many'에서는'MAX_OBJS'와'objs'를 모두 사용합니다. 그러나 어느 것에 대해서나 정의는 보이지 않습니다. 마찬가지로 main에서'i'를 정의하지만 결코 사용하지 않는 것처럼 보이지만 정의하지 않고'j'를 사용하십시오. 또한'rand'를 데이터 멤버와 Object 내부의 함수로 사용하는데, 이것은 혼란 스럽습니다. –
적어도이 코드의 3 배가되는 원본 코드가 아닙니다. 나는 매크로에서 추상화를 이해할 수 있다고 생각했고, "objs"는 "obj_list"(피곤함 실패)를 의미했습니다. 나는 고칠 것이다. – paulochf