2013-11-03 529 views
1

我得到的編譯器錯誤操作符重載<<錯誤

no match for 'operator<<' in 'std::cout << VertexPriority(2, 4u)' 

在提到這個操作符重載主類,但我不能在那裏已瞭解的誤差。

這裏是運算符重載行,我在類定義中實現了它。

std::ostream& operator<<(std::ostream& out) const { return out << "Vertex: " << this->vertex << ", Priority: " << this->priority; } 

頂點和優先級是整數和無符號整數。

在主類我想這樣做:

std::cout << VertexPriority(2, 3) << std::endl; 
+0

你沒有定義插入運營商那樣,除非你打算插入一個ostream到你的對象(我都可以,但是擔保是*不*)。請參閱常見運算符重載部分[在此答案](http://stackoverflow.com/questions/4421706/operator-overloading-in-c/4421719#4421719)。 – WhozCraig

+0

我應該如何定義它? – giacomotb

+0

請參閱我之前的評論鏈接的文章[**或點擊這裏**](http://stackoverflow.com/questions/4421706/operator-overloading-in-c/4421719#4421719) – WhozCraig

回答

2

將其定義是這樣的:

class VertexPriority { 
    ... 

    friend std::ostream& operator<< (std::ostream& out, const VertexPriority& vp); 
}; 

std::ostream& operator<< (std::ostream& out, const VertexPriority& vp) { 
    return out << "Vertex: " << vp.vertex << ", Priority: " << vp.priority; 
} 

friend關鍵字是必要的,如果VertexPriority::vertexVertexPriority::priority不公開。

如需更多幫助,請閱讀本教程:http://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators/

+0

好的,但現在的錯誤是 [鏈接器錯誤] undefined引用運算符<<(std :: ostream&,VertexPriority&)' 我改變了一下你的代碼,因爲它不讓我使用指針(vp-> priority),所以我使用已經實現getter(vp.getVertex) – giacomotb

+0

查看更新後的答案。 (使用'.'而不是' - >'。) –

+0

固定的,我不知道爲什麼,但是我在函數聲明中的VertexPriority之前刪除了一個'const' – giacomotb