Чтобы упростить процесс отладки, я решил объявить глобальную переменную, которая является указателем на объект класса, и использовать глобальный указатель для доступа к любым переменным более низкого класса. Класс определяется с помощью шаблона. В какой-то момент, когда объект класса создан, я мог назначить глобальный указатель и использовать его где-нибудь еще.
В моем случае я попытался добавить переменную типа Net (это для кода py-fast-rcnn).
namespace caffe {
...
int glb_layer_id;
template <typename Dtype>
shared_ptr<Net<Dtype>> glb_Net;
template <typename Dtype>
void Net<Dtype>::Init(const NetParameter& in_param) {
...
}
Добавление int glb_layer_id
не было никаких проблем, и я мог использовать переменную в другом месте. Но когда я добавил переменную glb_Net, у меня была ошибка компиляции ниже.
ckim @ stph45: ~ / Neuro / py-faster-rcnn.org]! make
make -C caffe-fast-rcnn /
make: вход в каталог /home/ckim/Neuro/py-faster-rcnn.org/caffe-fast-rcnn'
/home/ckim/Neuro/py-faster-rcnn.org/caffe-fast-rcnn»
CXX src/caffe/net.cpp
src/caffe/net.cpp:41: error: template declaration of 'caffe::Net<Dtype>* caffe::glb_Net'
src/caffe/net.cpp: In member function 'void caffe::Net<Dtype>::Init(const caffe::NetParameter&)':
src/caffe/net.cpp:75: error: 'glb_Net' was not declared in this scope
make: *** [.build_debug/src/caffe/net.o] Error 1
make: Leaving directory
Класс Net
изначально был определен с использованием шаблона, поэтому я должен использовать тот же шаблон для переменной Net. Но, как можно видеть, здесь есть ошибка. В чем проблема? Любая помощь приветствуется. (Кстати, в Caffe я также хочу узнать, как я могу получить доступ к переменной Net из слоя внутри сети).
Объявление переменной shared_ptr выполняется без указания ключевого слова template.
Вместо объявления
template <typename Dtype> shared_ptr<Net<Dtype>> glb_Net;
Вы должны были объявить glb_Net как:
#include <Dtype.h>
#include <Net.h>
shared_ptr<Net<Dtype>> glb_Net;
Других решений пока нет …