4

非テンプレート (つまり「通常の」) クラスがあり、テンプレート フレンド関数が必要な場合、コンパイラ エラーを発生させずに記述するにはどうすればよいですか? 私がやろうとしていることを説明する例を次に示します。

template <class T>
void bar(T* ptr);

class MyClass  // note that this isn't a template class
{
private:
    void foo();

    template <class T>
    friend void bar(T*);  // ERROR: compiler gives me all kinds of grief
};

template <class T>
void bar(T* ptr)
{
    if (ptr)
    {
        MyClass obj;

        obj.foo();
    }
}

私は Visual Studio 2005 を使用していますが、特定のエラーはエラー C2063であり、「バー」は関数ではないことを示しています。ここで何を別の方法で行う必要がありますか?

4

2 に答える 2

4

投稿した内容でエラーが発生しますか? 以下(Visual Studio 2005を使用)は私にとってはうまくいきます:

#include <iostream>
template <class T>
void bar(T* ptr);

class MyClass  // note that this isn't a template class
{
private:
    void foo();

    template <class T>
    friend void bar(T*);  // ERROR: compiler gives me all kinds of grief
};

void MyClass::foo()
{
    std::cout << "fooed!" << std::endl;
}

template <class T>
void bar(T* ptr)
{
    if (ptr)
    {
        MyClass obj;

        obj.foo();
    }
}


int _tmain(int argc, _TCHAR* argv[])
{

    int someObj = 1;
    bar(&someObj);

    return 0;
}
于 2009-01-19T19:46:36.120 に答える
0

これは修正というより回避策ですが、専門分野を友達としてリストアップしようとしましたか?

于 2009-01-19T19:37:27.107 に答える