2

我在模板类中有一个模板类。我可以轻松地内联实现成员函数,但在我的特定情况下,我遇到了前向声明问题,因此被迫在声明后实现它——我意识到我已经忘记了如何去做。

如果这个小例子可以编译(不移动定义内联)我的问题将得到回答:

#include <iostream>

template <typename T, typename V>
struct Outer {

    template <int Count>
    struct Inner {
        void printer() const;
    };

};

template <typename T, typename V, int Count>
inline void Outer<T, V>::Inner<Count>::printer() const {
    std::cout << "Oh hai. I'm inner<" << Count << ">" << std::endl;
}

int main() {
    Outer<int, int>::Inner<3> i;

    i.printer();

    return 0;
}

编辑:修复了 Stuart 修复的不相关的错别字(以帮助使答案更清晰)

4

1 回答 1

2

以下编译并适用于 g++ 4.2.1。(它也可以使用在线 Comeau 编译器进行编译,值得一提。)关键更改是 (a) 始终Outer正确拼写,(b) 分离出两组模板参数,以及 (c) 更改CounterCount.

#include <iostream>

template <typename T, typename V>
struct Outer {

    template <int Count>
    struct Inner {
        void printer() const;
    };

};

template <typename T, typename V>
template <int Count>
void Outer<T, V>::Inner<Count>::printer() const {
    std::cout << "Oh hai. I'm inner<" << Count << ">" << std::endl;
}

int main() {
    Outer<int, int>::Inner<3> i;

    i.printer();

    return 0;
}
于 2012-05-05T00:00:53.293 回答