Чтобы упростить процесс отладки, я решил объявить глобальную переменную, которая является указателем на объект класса и использует глобальный указатель для доступа к любым более низким переменным класса. Класс определяется с помощью шаблона. В какой-то момент, когда объект класса сконструирован, я могу назначить глобальный указатель и использовать его где-то еще.
В моем случае я попытался добавить переменную типа Net (это для кода py-fast-rcnn).ошибка wihle, объявляющая переменную с использованием шаблона
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] делают сделать -C Caffe-быстро-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
/главная/ckim/Neuro/ру-быстрее-rcnn .org/caffe-fast-rcnn '
Класс Net
был первоначально определен с использованием шаблона, поэтому я должен использовать тот же шаблон для переменной Net. Но, как видно, есть ошибка. В чем проблема? Любая помощь оценивается. (Кстати, в Caffe я также хочу знать, как я могу получить доступ к переменной Net из слоя внутри Сети).
Привет, Я попробовал, используя 'shared_prt> glb_Net;' я получил ошибки, как это: 'SRC/Caffe/сети .cpp: 40: ошибка: «Dtype» не был объявлен в этой области src/caffe/net.cpp: 40: предупреждение: оператор «>>» будет рассматриваться как два прямоугольных скобки в C++ 0x src/caffe/net.cpp: 40: предупреждение: предлагать круглые скобки вокруг выражения «>>» src/caffe/net.cpp: 40: ошибка: «glb_Net» не был объявлен в этой области src/caffe/net.cpp: 40: ошибка: аргумент шаблона 1 недействителен src/caffe/net.cpp: 40: ошибка: аргумент шаблона 1 недействителен' любая идея? –
Я добавил, что это относится к моему ответу. Возможно, вы должны включить небольшое примерное приложение, чтобы мы могли исправить все проблемы. Ваш пример выше был всего лишь фрагментом, поэтому мы не могли рассказать обо всем, что ему не хватает. –
в пространстве имен caffe, я вижу 'typedef float Dtype;' и я включил net.hpp. Это часть сложных кодов, поэтому я бы сделал простой пример. Я в середине исправления ошибки, поэтому я сделаю это когда-нибудь позже. Благодарю. –