2014-12-10 2 views
1

Я пытаюсь скомпилировать древний код (последнее обновление 2004 г.).Ошибка при попытке скомпилировать библиотеку MixKit (C++)

Я получаю пару сообщений об ошибках, я указал на местоположение кода и приведенную ниже ошибку.

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

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

Вы должны использовать 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. Что делать, если вы специализируетесь на foo, так что у него нет bar? Вам нужно прямо сказать «да, я хочу , чтоbar».

Эта функция называется «поиск двухфазного имени», это старая функция стандарта C++. More info on stackoverflow.

+0

спасибо за подсказку, раньше я ушел с использованием -fpermissive в соответствии с инструкциями, но это намного чище. еще раз спасибо! – jason