2016-07-03 18 views
1
#include "stdafx.h" 
#include <iostream> 

using namespace std; 

// move operation is not implicitly generated for a class where the user has explicitly declared a destructor 
class A { 
public: 
    friend inline void operator << (ostream &os, A& a) { 
     os << "done" << endl; 
    } 
}; 

template <typename T> 
void done(T a) { 
    cout << a; 
} 

template<typename T> 
void g(T h) { 
    cout << h << endl; 
} 

int main() 
{ 
    A a; 
    done(a); 
    // g(a); // with error: "mismatch in formal parameter list" and '<<': unable to resolve function overload. 
    return 0; 
} 

「ENDL」とテンプレート関数のエラーをコンパイルし、ENDL 'で、コードがエラーで をコンパイルできないほど奇妙です':関数のオーバーロードを解決できません。VS2015はコメントとして

+0

'using namespace std;'を使用せず、明示的に 'std ::'の前に接頭辞を付けます。 –

答えて

2

あなたはチェーン機能が

friend inline std::ostream& operator << (std::ostream &os, A& a) { 
    os << "done" << endl; 
    return os; 
} 

ないこの

friend inline void operator << (ostream &os, A& a) { 
    os << "done" << endl; 
} 

あなたがライン

friend inline void operator << (ostream &os, A& a) 

を使用呼び出すことができるようにあなたは、ストリームへの参照を返す必要があります とendlの間にoperator<<が存在しないため、0

が問題になります。

関連する問題