【问题标题】:C++ templates and external function declarationsC++ 模板和外部函数声明
【发布时间】:2008-12-12 20:14:23
【问题描述】:

我有这个:

template <typename T>
class myList
{
    ...
    class myIterator
    {
        ...
        T& operator*();
    }
}
...
template<typename T>
T& myList<T>::myIterator::operator*()
{
    ...
}

这给了我以下错误:“'&' 标记之前的预期初始化程序”。我到底应该怎么做?我已经尝试在它之前添加“模板 myList::myIterator”,但没有奏效。

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    一些分号和公众号怎么样:

    template <typename T>
    class myList
    {
    public:
        class myIterator
        {
        public:
            T& operator*();
        };
    };
    

    【讨论】:

    • 这对我来说很好(带分号)。如果没有分号,我会收到关于分号的错误,而不是关于“&”标记的错误。也许“...”中的代码是相关的。
    • 是的,也适合我。我不知道 OP 的代码有什么问题-.- 他应该真的在...中显示代码。
    • 小心使用模板,如果你不实例化它们并不是所有的语义检查都完成(因为没有 T 是不可能的)。
    【解决方案2】:

    编译正常:
    如果您想发布代码,它应该尽可能简单,但它仍然应该是可编译的。如果你把东西删掉,那么你可能会删除你想要修复的真正错误,如果你向人们展示代码,这里的人真的很擅长发现问题。

    在这种情况下,我们只能归结为您删除的一些代码。

    template <typename T>
    class myList
    {
        public:
        class myIterator
        {
            public:
            T& operator*();
        };
    };
    
    template<typename T>
    T& myList<T>::myIterator::operator*()
    {
        static T    x;
        return x;
    }
    
    int main()
    {
        myList<int>             a;
        myList<int>::myIterator b;
        int&                    c= *b;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多