为了简化调试过程,我决定声明一个全局变量,它是一个指向类对象的指针,并使用全局指针来访问任何低级变量。该类使用模板定义。在构造类对象的某个时刻,我可以分配全局指针并在其他地方使用它 在我的例子中,我尝试添加一个变量类型的Net(这是用于py-faster-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
制作-C caffe-fast-rcnn /
make:进入目录/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
/ home / ckim / Neuro / py-faster-rcnn.org / caffe-fast-rcnn&#39;
类Net
最初是使用模板定义的,因此我必须为Net变量使用相同的模板。但是可以看出,有一个错误。问题是什么?任何帮助赞赏。 (顺便说一下,在Caffe中,我也想知道如何从网络中的一个层访问Net变量。)
答案 0 :(得分:0)
在不指定'template'关键字的情况下声明shared_ptr变量。 而不是声明
template <typename Dtype> shared_ptr<Net<Dtype>> glb_Net;
您应该将glb_Net声明为:
#include <Dtype.h>
#include <Net.h>
shared_ptr<Net<Dtype>> glb_Net;