5

我确实阅读了一些相关的线程,但问题仍然不清楚:

#include <stdio.h>
#include <vector>
#include <iostream>

template <> class stack <int>
{
  public:
    std :: vector <int> stackVector;

};

编译错误:

templateSpecializ.cpp:5: error: ‘stack’ is not a template
templateSpecializ.cpp:6: error: explicit specialization of non-template ‘stack’

从这个链接:coderSource.net

我错过了什么吗?我觉得我有。我什至尝试在那里定义函数,但这没有帮助。

4

2 回答 2

8

那是称为堆栈的模板的模板特化。stack 没有在这些头文件中定义。如果你想定义一个新的模板类,你必须首先定义基本情况

template<typename T>
class stack
{
  //implementation goes here
};

template<>
class stack<int>
{
 public:
  std::vector<int> stackVector;
};

如果您只想为 int 定义堆栈而不是为您可以使用的每种类型定义堆栈

template<typename T> class stack;
template<>
class stack<int>
{
 public:
  std::vector<int> stackVector;
};
于 2011-04-01T08:45:28.840 回答
2

如果您还没有要专门化的模板,则不能专门化您的模板。所以这应该工作:

template <typename T>
class stack
{
};

template <>
class stack<int>
{
  public:
    std::vector<int> stackVector;
};
于 2011-04-01T08:40:37.830 回答