在我的代码中,我使用了一个模板化的多维容器类array_dyn<T>
,它的属性my_data
是std::vector<T>
.
为了保持可分离性,我使用自己的类bisArray<T>
继承自array_dyn
:
typedef array_dyn<T> super_type;
typedef typename super_type::index_t index_t;
template < typename Sizes >
bisArray( dirs a_dir, Sizes const& a_sizes={} ):
super_type ( a_dir, a_sizes ), super_type::my_data( super_type::size()) {}
template < typename Sizes >
bisArray( Sizes const& a_sizes={} ):
super_type ( dir_fwd, a_sizes ), super_type::my_data( super_type::size()) {}
这里,dir_fwd
(and dir_rev
) 表示 c (and fortran) 存储顺序。array_dyn 类在这里 [ https://svn.boost.org/svn/boost/sandbox/variadic_templates/sandbox/array_dyn ]。
很高兴提供更多代码,但我认为我得到的问题是在这里引起的:当我使用
std::vector<size_t> newsizes({2,3});
bisArray<int> newarray(newsizes); // using constructor #2
然后有错误信息
no type named my_data in struct 'array_dyn<int>'
以前有关此错误的 StackOverflow 帖子提到了循环定义和前向声明;但这不是我在这里所做的。我只是继承自array_dyn
,它有一个属性my_data
,但是当我用派生类 bisArray 创建一个对象时,它说它的基类没有这个属性。
我是否使用了错误的继承机制?还是访问方式不对?