내 String
클래스의 일부 반복 메소드를 선언 및 구현했습니다. begin()
, end()
등 ...하지만 테스트 프로그램에서 사용하려고하면 모든 정의되지 않은 참조가 나타납니다.내 반복 방법으로 정의되지 않은 참조
String.h
:
public:
typedef char* iterator;
typedef const char* const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
iterator begin();
iterator begin() const;
iterator end();
iterator end() const;
const_iterator cbegin();
const_iterator cend();
reverse_iterator rbegin();
reverse_iterator rbegin() const;
reverse_iterator rend();
reverse_iterator rend() const;
const_reverse_iterator crbegin();
const_reverse_iterator crend();
private:
char* string_;
String.cpp
:
inline String::iterator String::begin() {
return string_;
}
inline String::iterator String::begin() const {
return string_;
}
inline String::iterator String::end() {
return string_ + length_ - 1;
}
inline String::iterator String::end() const {
return string_ + length_ - 1;
}
inline String::const_iterator String::cbegin() {
return string_;
}
inline String::const_iterator String::cend() {
return string_ + length_ - 1;
}
inline String::reverse_iterator String::rbegin() {
return reverse_iterator(end());
}
inline String::reverse_iterator String::rbegin() const {
return reverse_iterator(end());
}
inline String::reverse_iterator String::rend() {
return reverse_iterator(begin());
}
inline String::reverse_iterator String::rend() const {
return reverse_iterator(begin());
}
inline String::const_reverse_iterator String::crbegin() {
return reverse_iterator(end());
}
inline String::const_reverse_iterator String::crend() {
return reverse_iterator(begin());
}
에 어떤 문제가 있습니까?
바보 같은 질문 : 정확히 어디에'string_'을 할당하고 있습니까? –
다른 곳에서 선언 할 때 함수 정의에 인라인을 넣는 것은 꽤 나쁜 생각입니다. .cpp 파일에서 – pmr
인라인은 다소 유용하지 않습니다. .cpp 파일 전체를 .h로 옮기거나, 인라인 키워드를 유지하거나, cpp 파일에서 제거하십시오. 둘 중 어느 하나가 아니라 (또는 본 것처럼) 둘 다 아닙니다. – WhozCraig