2014-12-10 2 views
1

일부 고대 코드를 컴파일하려고합니다 (2004 년 마지막 업데이트).MixKit 라이브러리를 컴파일 할 때 오류가 발생했습니다. (C++)

몇 가지 오류 메시지가 나타납니다. 아래 코드 위치와 오류를 지적했습니다.

MxDynBlock.h:66:68: error: there are no arguments to ‘begin’ that 
depend on a template parameter, so a declaration of ‘begin’ must 
be available [-fpermissive] ... 

1.

https://code.google.com/p/hmeshsimp/source/browse/trunk/hsimpkit/MixKit/MxDynBlock.h?r=71#40

MxDynBlock.h:38:31: error: there are no arguments to ‘resize’ that 
depend on a template parameter, so a declaration of ‘resize’ must be 
available [-fpermissive] ... 

    if(length()<len) resize(len); 

2.

https://code.google.com/p/hmeshsimp/source/browse/trunk/hsimpkit/MixKit/MxDynBlock.h?r=71#67 나는 적절한 헤더를 포함 할 필요가 있다고 생각하지만, 내가 찾을 수 없습니다 생각하는 하나. 너 나 좀 도와 줄 수있어?

답변

1

this->begin(), this->resize()을 사용해야합니다.

이 언어 기능의 작은 데모는 다음과 같이 진행됩니다

template <typename T> 
struct foo 
{ 
    void bar() {} 
}; 

template <typename T> 
struct baz : foo <T> 
{ 
    void qux() { 
     bar();   // <- bad 
     this->bar(); // <- good 
    } 
}; 

이유는 foo<T>bar<T>의 기본 클래스입니다하지만, 컴파일러는 당신이 bar에 의해 당신이 정말로 foo<T>::bar을 의미 확신 할 수 없다는 것입니다. foobar이 없도록 전문화한다면 어떨까요? 당신은 명시 적으로 "예, 내가 bar"을 원한다고 말할 필요가 있습니다.

이 기능을 "2 단계 이름 조회"라고하며, C++ 표준의 이전 기능입니다. More info on stackoverflow.

+0

팁을 주셔서 감사합니다. 이전에 지시에 따라 -fpermissive를 사용했지만, 훨씬 더 깨끗합니다. 다시 한 번 감사드립니다! – jason

관련 문제