그것은이 버그C++ GCC 4.3.2 에러
Question about storing array in a std::vector in C++
에 문제점이 유사하지만 다른 이유 (아래 참조). C++에서 다음 샘플 프로그램에 대한
:
#include <vector>
int main(int c_, char ** v_)
{
const int LENGTH = 100;
std::vector<char[LENGTH]> ca_vector;
return 0;
}
GCC 4.2.3 깨끗하게 컴파일합니다. GCC 4.3.2 다음과 같은 오류가 방출 :
/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h: In function ‘void std::_Destroy(_Tp*) [with _Tp = char [100]]’: /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:103: instantiated from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator = char (*)[100]]’ /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:128: instantiated from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator, std::allocator&) [with _ForwardIterator = char (*)[100], _Tp = char [100]]’ /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_vector.h:300: instantiated from ‘std::vector::~vector() [with _Tp = char [100], _Alloc = std::allocator]’ test.cpp:7: instantiated from here /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:88: error: request for member ‘~char [100]’ in ‘* __pointer’, which is of non-class type ‘char [100]’
이유는 분명히 인해 잘못된 배열에 대한 포인터 붕괴에, 나는 생각한다,라고
include/g++-v4/bits/stl_construct.h
template
inline void
_Destroy(_Tp* __pointer)
{ __pointer->~_Tp(); }
에서이 비트입니다.
내 질문 : std :: vector에 배열 저장을 방해하는 언어 표준이 있습니까? 아니면 특수 GCC 버전의 버그입니까?
필자는이 내용을 컴파일해야한다고 생각합니다 (예 : 4.2.3이 맞습니다).
감사 마틴은
std :: string을 사용하지 않는 이유는 무엇입니까? – kmarsh
코드가 GCC 4.2.3에서 컴파일되고 실행되었음을 말합니까? – fpmurphy1
그래도 시스템에서 컴파일됩니다. 그리고 그것은 작동하는 것 같습니다. – martin