내가 정적 데이터 멤버와 템플릿 클래스를 구축하기 위해 노력하고있어 나는 다음과 같은 코드를 컴파일 할 때이 오류 메시지가 :명시 적 인스턴스화 ...하지만 사용할 수없는 정의 [-fpermissive]
|In instantiation of ‘T<int>& T<int>::t’:|
16|required from here|
16|error: explicit instantiation of ‘T<int>::t’ but no definition available [-fpermissive]|
|In instantiation of ‘T<int>& T<int>::t’:|
16|required from here|
16|error: explicit instantiation of ‘T<int>::t’ but no definition available [-fpermissive]|
||=== Build finished: 2 errors, 4 warnings (0 minutes, 0 seconds) ===|
을 합니다 (보여 문제에 증류수.)
코드
template <class A>
class T {
private:
static T& t;
public:
T& getT() {return t;}
};
T<int> i;
template T<int>& T<int>::t;
int main()
{
i.getT();
return 0;
}
내가 무엇을 의미하는지 이해가 안 무서워 "사용할 수없는 정의." 나는 "템플릿 T & T :: t;"라고 생각했다. 정적 데이터 멤버를 정의합니다.
나는 리눅스에서 GCC를 사용하고 있습니다 : 어떤 도움
[email protected]:~$ c++ --version
c++ (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
감사합니다!
편집 : 정적 멤버의 선언을 참조로하는 것이 분명히 오류이며이를 수정했습니다.
여러 가지 해결책과 제안을 보내 주셔서 감사합니다. 나는 그 (것)들을 공부하고 어느 것이 가장 적합한 지 결정해야 할 것이다.
FWIW, 내가 계획하고있는 것은 단일 연결 목록을 다시 작성하는 것입니다. 대상은 Arduino이며 제한된 리소스로 코드 및 RAM 크기에 민감합니다. 그렇지 않으면 STL 컨테이너를 사용하는 것이 행복 할 것입니다. 단일 링크 된 목록을 코딩 중이며 정적 데이터 멤버가 목록 머리를 가리키는 센티널이됩니다. 목록의 마지막 요소는 감시 카메라를 가리 킵니다. 첫 번째 반복에서는 상속을 사용하여이 글을 쓰기 시작했지만 곧 다양한 파생 클래스에 대한 공통 코드가 없다는 것을 알게되었습니다. (그들은 개념 상 유사점을 공유하지만 구현으로 번역되지 않았다. 예를 들어, 그것들은 별개의 목록과 독특한 처리법을 가졌기 때문에 상속은 초기 선택이 좋지 않은 듯했다.)이 어려움은 템플릿이 마찬가지로 좋지 않다는 신호가 아니길 바란다. 선택.
조금 벗어난 주제 : 여기에 나와있는 것은 비교적 단단한 결합을 유도하기 때문에 조심해서 사용해야하는 싱글 톤입니다. 싱글 톤은 요즘 코드 냄새 (또는 디자인 냄새)로 간주됩니다. 그것은 템플릿이라는 것을 보여 주므로 하나 이상의 냄새를 맡을 계획입니다. 구현 방법은 스레드 세이프가 아니므로 "Meyers Singleton"을 찾아야 할 수도 있습니다. –
그럼에도 불구하고 주제에서 벗어나지 만 유용합니다. 나는 당신이 Effective C++에서 그 언급을 언급하고 있다고 추정한다. 나는 그것을 볼 것이다. 나는 여기에 특정 오류가 궁금하지만 다른 솔루션을 열어. – HankB
글쎄, 당신이 제공 한 증류 된 코드에서 싱글 톤으로 해결하려고 시도한 것은 컴파일러 오류에 관한 것이므로 ok입니다. 싱글 톤을 사용하는 데싱 문제를 해결하기위한 대안에 관심이 있다면, 다른 싱글 질문을 열고, 현재 싱글 톤을 사용하는 컨텍스트와 현재 디자인을 살펴보십시오. –