내 프로그램을 컴파일 할 수없는 이유를 알아 내는데 문제가 있습니다.C++ 서브 클래 싱
struct Structure {
/** How many points in the space */
idx_t records;
/** Number of different kinds of vectors (position, velocity, etc...) */
idx_t vectors;
/** Dimensionality of one vector */
idx_t dimensionality;
};
template <class _T>
class LinearSpace : public Storage<_T> {
...
Structure structure;
public:
LinearSpace(int recs, int vecs, int dim)
: Storage<_T>(recs*vecs*dim), structure({recs, vecs, dim}) {
...
};
LinearSpace(const LinearSpace<_T> &orig, int index = 0)
: Storage<_T>(orig, index) {
...
}
};
모든이 시점까지 괜찮 : 나는 내가 LinearSpace
클래스를 파생 할이 기본 클래스에서
template <class _T>
class Storage {
...
Storage<_T> &provider;
public:
Storage(int n)
: provider(self) {
...
};
Storage(const Storage<_T> &orig, int offset = 0, int size = 0)
: provider(orig.provider) {
...
}
};
처럼 보이는
Storage
템플릿 클래스가 있습니다. 내가 정의한 모든 생성자를 사용하여
Storage
과
LinearSpace
개체를 쉽게 생성 할 수 있습니다. 그러나, 나는
template <class _T>
class Record : public LinearSpace<_T> {
...
public:
Record(int vecs, int dim)
: LinearSpace<_T>(1, vecs, dim) {
...
};
Record(const LinearSpace<_T> &orig, int index = 0)
: LinearSpace<_T>(orig, index) {
...
}
};
을 다음과 같이 LinearSpace
을 하위 클래스 시도하고 LinearSpace
에서 Record
과 (LinearSpace
의 두 번째 생성자를 호출 Record
의 두 번째 생성자) 인덱스 I 컴파일러에서 오류를 구성하려고 이는 no matching constructor for initialisation of LinearSpace<type>
이 있다고 불평합니다.
LinearSpace<TYPE> space(2, 2, 2);
Record<TYPE> record(space, 0);
가 나는 그것을 얻지 않는다 ... Record
의 생성자는 정기적으로 LinearSpace
의 생성자를 호출하고 LinearSpace
객체와 정수에 대한 참조를 제공합니다 : 나는 다음과 같은 시도 할 때 오류가 상승한다. 이러한 생성자는 분명히 존재하므로 쓰기가 가능합니다.
LinearSpace<TYPE> space2(space, 0);
아무런 문제가 없습니다. 그래서, 왜 내 프로그램을 컴파일 할 수 없는지 모르겠다!
오랫동안 죄송합니다. 누구나 내가 잘못 알고 있다는 생각을 갖고 있습니까?
미리 감사드립니다.
P. X86 (최신 버전의 LLVM 5.1 사용)이 OS X 10.9에서 실행되고 있습니다.
* 특정 * 오류를 게시 할 수 있습니까? ctor의'const'ness를 제거해 보았습니다. const가 아닌 객체를 전달하는 것과 아무 관계가 없는지 확인해 주시겠습니까? – MrDuk
'_T'는 구현에 예약 된 이름이기 때문에 공식적으로 코드는 유효하지 않습니다. 밑줄로 시작하고 대문자로 시작하는 모든 이름은 예약되어 있습니다. 이름에도 두 개의 연속적인 밑줄이 있습니다. 또한, 밑줄로 시작하는 모든 이름은 전역 이름 공간에 예약되어 있습니다. –
오류를 나타내는 짧은 ** ** ** 프로그램을 게시하십시오. 오류에 영향을주지 않는 모든 행을 삭제하고 남겨진 내용을 복사하여 붙여 넣으십시오. 자세한 내용은 http://stackoverflow.com/help/mcve 또는 http://SSCCE.org를 참조하십시오. –