모두 방법을 사용할 수있는 경우에도, Vector_const_iterator 및 Vector_iterator 사이에 "변환"수 없습니다. 호출자는 계수를 반복 할 수 있어야하지만 기본 구현을 노출하고 싶지 않습니다.컴파일러 내가 다항식의 계수를 표현하기 위해 표준 : : 벡터 주변에 작은 래퍼 클래스를 만들려고 해요
는 패턴 here, here을 설명하여, 다른 곳에서, 나는 아래와 같이 반복자를 따라 통과 시도했다 :
:typedef std::vector<unsigned char> charVec;
class gf255_poly
{
public:
// Constructors and Polynomial-y Functions
// ...
// Iterators to go from high to low degree
charVec::const_reverse_iterator h2l_begin() const { return p.rbegin(); };
charVec::const_reverse_iterator h2l_end() const { return p.rend(); };
charVec::reverse_iterator h2l_begin() { return p.rbegin(); };
charVec::reverse_iterator h2l_end() { return p.rend(); };
// Iterators to go from low to high degree
charVec::const_iterator l2h_begin() const { return p.begin(); };
charVec::const_iterator l2h_end() const { return p.end(); };
charVec::iterator l2h_begin() { return p.begin(); };
charVec::iterator l2h_end() { return p.end(); };
protected:
std::vector<unsigned char> p;
};
등이 하나 다음 방법에 익숙해이 gf255_poly 객체 그 보이지만
// Performs polynomial evaluation in GF(2^8)
unsigned char gf255_poly_eval(const gf255_poly &poly, unsigned char x) const
{
unsigned char fx = poly.coefHigh(); // Initialize with coef of highest degree term
// Use Horner's method with consecutively factored terms:
// x^3 + 2x^2 + 3x + 4 -> (((1x + 2)x + 3)x + 4)
charVec::reverse_iterator next_coef;
for (next_coef = poly.h2l_begin(); next_coef != poly.h2l_end(); next_coef++)
fx = gf255_mul(fx, x)^*next_coef; // Recall^is addition in GF 2^8
return fx;
}
단순 유형으로 잘못되어 가고 뭔가가있다. 나는 두 반복자를 돌려주는 방법을 제공 한 -이 메시지를 이해하지 못하는
error C2664: 'std::_Revranit<_RanIt,_Base>::_Revranit(_RanIt)' : cannot convert parameter 1 from 'std::_Vector_const_iterator<_Ty,_Alloc>' to 'std::_Vector_iterator<_Ty,_Alloc>'
: 비주얼 스튜디오 나에게 내가 밖으로 퍼즐 수가 없습니다 for 루프와 라인에이 오류를 제공합니다 const_iterators. 왜 컴파일러는 그것들을 선택할 수 없습니까? 이 질문에 암시
이가 (그들은 여전히 이러한 표준 : : 벡터 형식을 처리해야하기 때문에) 전혀 발신자의 상세 정보를 숨기기위한 좋은 전략인지, 그리고 내가 대답을 감사하겠습니다 그 또한이 문제를 해결하십시오.
, C++ (11) ISN을 ' 현재 옵션입니다. 전체 데브샵은 VS 로의 업그레이드를 희망하며 살고 있지만 실제 일어날 것이라는 징후는 없습니다. 그럼에도 불구하고 철저한 답변과 새로운 기능을 추가로 탄약에 감사드립니다! – Bear