模板类c ++的前向声明

时间:2014-12-05 22:06:52

标签: c++

我看到了类似的例子,但没有完全理解它们,所以请不要马上把它标记为重复。 我认为我的问题有一个简单的解决方案,我只是在学习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>'

1 个答案:

答案 0 :(得分:1)

这个问题与模板无关。在C ++中,类类型T必须是完整的,特别是,如果声明了类型为T的非静态类数据成员(请参阅标准的3.2/5 (One definition rule)部分,或者阅读{{ 3}})。

&#34;必须完整&#34;表示类T的定义应位于相应数据成员的定义之前。正如Cameron在评论中所指出的,实现这一目标的一种常见方法是在头文件中添加一个定义,并在所需的任何地方包含该标题 - 就像您在包含标准头时所做的那样例如<vector><map>等。