c++ - 如何让这个模板类编译?

标签 c++ templates

抱歉,我无法构建可以正确捕捉我的问题的问题。我的问题是这个。

我有一个这样的模板类。我无法理解如何准确定义 Get 函数。

template<class Data>
class Class
{
    struct S
    {
    };
    void Do();
    S Get();
};

template<class Data>
void Class<Data>::Do()
{
}

template<class Data>
Class<Data>::S Class<Data>::Get()
{
}

我得到以下错误

1>error C2143: syntax error : missing ';' before 'Class<Data>::Get'
1>error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>fatal error C1903: unable to recover from previous error(s); stopping compilation

最佳答案

template<class Data>
Class<Data>::S Class<Data>::Get()

需要

template<class Data>
typename Class<Data>::S Class<Data>::Get()

因为S是依赖类型。任何时候你有一个嵌套在模板中的类型,你需要使用关键字 typename .例如,vector<int> 上的迭代器类型为 typename vector<int>::iterator .

关于c++ - 如何让这个模板类编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21508622/

相关文章:

c++ - 获取模板堆栈实现的 C++ 语法错误

c++ - 提取模板类型的签名?

c++ - 遍历 vector 的每个元素

c++ - std::function 模板参数解析

C++ 创建原始数组类

c++ - 什么叫通过花括号赋值?可以控制吗?

c++ - 专门用于自定义容器的 std::swap 算法

c++ - 使用 enable_if 选择特征 - 适用于 clang,但不适用于 gcc

c++ - 替换 glaux 函数

c++ - 项目符号列表 C++