벡터로 구현 된 목록을 사용하여 벡터로 잘 작동하는 동안 오류가 발생합니다. c2227 -> set_as_output의 목록이 클래스/구조체/공용체/제네릭 유형을 가리켜 야합니다. . 나는 목록이 문제를 해결하기 위해 우려로까지 내 코드에없는 것을 구현 목록 및 벡터 사이의 차이이며, 무엇을 배우고 싶었다목록과 벡터의 색인 생성 사이의 차이
class pin {
friend class gate;
pin(){}
~pin() {}
public:
void set_as_input();
void set_as_output();
}; // class pin
class gate {
protected:
std::list<pin *> pins_;
//std::vector<pin *> pins_;
gate();
~gate();
virtual bool validate_structural_semantics();
public:
}; // class gate
class and_gate : public gate
{
bool validate_structural_semantics();
public:
}; // class and_gate
bool and_gate::validate_structural_semantics()
{
if (pins_.size() < 3) return false;
//pins_[0]->set_as_output();//using vectors and works fine
pins_.begin ->set_as_output();//error is here with lists
//for (size_t i = 1; i < pins_.size(); ++i)
for (std::list<pin *>::iterator iter = pins_.begin();
iter != pins_.end(); ++iter)
//pins_[i]->set_as_input();
(*iter)->set_as_input();
return true;
}
아래 모두 구현을 제공합니다. 어떻게 해결할 수 있습니까?
표준 : : 목록은 [] 연산자 같은 것들을 통해 랜덤 액세스를 지원하지 않습니다 그리고 당신은
(*iter)->set_as_input()
와 함께했던 것처럼 당신은 반복자는 포인터를 얻는 역 참조 할 필요가있다. 이 내용은 C++ 교과서 또는 C++ 참조에서 다뤄져야합니다. std :: list와 std :: vector는 일반적으로 서로 바꿔 쓸 수 없습니다. –@ Neil의 덧글 이외에 : 교과서에서 명확하게 다루지 않는 경우에는 [여기] (http://en.cppreference.com/w/cpp/container/list)에서 언제든지 확인할 수 있습니다 표준 수업과 함께 사용할 수 있습니다. – user0042