我看到了类似的例子,但没有完全理解它们,所以请不要马上把它标记为重复。
我认为我的问题有一个简单的解决方案,我只是在学习C++
。
我想用:
template<class T, std::size_t N>
class arnas_array {
//a copy of std:array functionality, basically, here.
};
在另一个类标题中,另一个文件,例如:
class options_databaze {
public:
struct options_to_save{
arnas_array<char, 123> option_name;
//char option_name[103];
int * option_value_pointer;
};
};
我无法让它发挥作用。 像这样的前向声明不起作用:
template<class T, std::size_t N>
class arnas_array;
我对这个问题知之甚少,第一次我被困在这里,任何例子都是黄金。
error C2079: 'options_databaze::options_to_save::option_name' uses undefined class 'arnas_array<char,123>'
答案 0 :(得分:1)
这个问题与模板无关。在C ++中,类类型T
必须是完整的,特别是,如果声明了类型为T
的非静态类数据成员(请参阅标准的3.2/5 (One definition rule)
部分,或者阅读{{ 3}})。
&#34;必须完整&#34;表示类T
的定义应位于相应数据成员的定义之前。正如Cameron在评论中所指出的,实现这一目标的一种常见方法是在头文件中添加一个定义,并在所需的任何地方包含该标题 - 就像您在包含标准头时所做的那样例如<vector>
,<map>
等。