使用STD::MAP-编译器错误C1001在类标题中的C++模板属性 我对C++比较陌生,所以我不确定我做错了什么。< /P>

使用STD::MAP-编译器错误C1001在类标题中的C++模板属性 我对C++比较陌生,所以我不确定我做错了什么。< /P>,c++,templates,compiler-errors,stdmap,C++,Templates,Compiler Errors,Stdmap,这是我的构想: 结构 template<size_t N> struct Offsets { static const int length = N; DWORD offsets[N]; }; 和财产: template <size_t N> std::map<std::string, std::map<DWORD, Offsets<N>>> pointers; 这导致了 编译器错误C1001 这有什么问题?变

这是我的构想:

结构

template<size_t N> struct Offsets 
{ 
    static const int length = N;
    DWORD offsets[N]; 
};
和财产:

template <size_t N>
std::map<std::string, std::map<DWORD, Offsets<N>>> pointers;
这导致了

编译器错误C1001


这有什么问题?

变量不能模板化,它们必须完全指定。因此,要声明指针变量,必须指定N。

变量不能模板化,必须完全指定。因此,要声明指针变量,必须指定N。

不能在变量上使用模板。如果您想保持指针的灵活性,请将其封装在模板类或结构中

template< size_t N >
class PointerOffsetMap
{
...
public:
    std::map<std::string, std::map<DWORD, Offsets<N>>> pointers;
}

这只是一个非常简单的例子,您可能应该将指针设为私有,并添加一些访问函数以获得一个漂亮的接口。

您不能在变量上使用模板。如果您想保持指针的灵活性,请将其封装在模板类或结构中

template< size_t N >
class PointerOffsetMap
{
...
public:
    std::map<std::string, std::map<DWORD, Offsets<N>>> pointers;
}

这只是一个非常简单的例子,您可能应该将指针设为私有,并添加一些访问函数以获得一个漂亮的界面。

这听起来很合理。谢谢你的回答。你会说使用std::vector是更好的选择吗?@user2081200我真的不能说什么是最好的,因为我真的不知道你想要实现什么。只是一个三维映射。像这样:1。标签,2。地址:3。补偿。偏移量的大小不一样,它们是不同的。@user2081200模板必须在编译时进行完全计算,并且您似乎希望能够在运行时设置不同的大小。因此,是的,那么std::vector似乎是更好的解决方案。@user2081200似乎,您只希望模板/别名typedefs使用std::map模板的任意结构偏移模板实例。这种类型的typedef已经被指定了,但还没有得到所有地方的支持:Dabrain刚刚发布了一个听起来合理的解决方案。谢谢你的回答。你会说使用std::vector是更好的选择吗?@user2081200我真的不能说什么是最好的,因为我真的不知道你想要实现什么。只是一个三维映射。像这样:1。标签,2。地址:3。补偿。偏移量的大小不一样,它们是不同的。@user2081200模板必须在编译时进行完全计算,并且您似乎希望能够在运行时设置不同的大小。因此,是的,那么std::vector似乎是更好的解决方案。@user2081200似乎,您只希望模板/别名typedefs使用std::map模板的任意结构偏移模板实例。已经指定了这种类型的typedef,但还没有在所有地方都支持:Dabrain刚刚发布了一个解决方案谢谢你的好主意:。谢谢你的好主意:。