簡體   English   中英

二進制'operator':未找到采用'Fraction'類型的右側操作數的運算符(或沒有可接受的轉換)

[英]Binary 'operator' : no operator found which takes a right-hand operand of type 'Fraction' (or there is no acceptable conversion)

[編輯]我正在寫一個類型為T的模板類。 在該類的函數成員之一中,類型T的變量應寫入std::ofstream對象。 一切正常,直到我使用自定義類型參數Fraction實例化此類。 盡管我確實重載了operator <<但仍發生錯誤。

// collection.h
#include <fstream>
template<typename T>
class Collection
{
public:
    void writeToFile();
private:    
    T val;
};

template<typename T>
inline void Collection<T>::writeToFile()
{
    std::ofstream file("output.txt");
    file << val;

}

// Fraction.cpp
#include <iostream>
std::ostream& operator << (std::ostream& str, const Fraction& f)
{
    std::cout << "Hello";
    return str;
}

新答案:

您回答需要在Fraction.h中用這樣的一行聲明operator << ,並在使用它的代碼之前#include "Fraction.h"

std::ostream& operator << (std::ostream& str, const Fraction& f);

聲明與定義的概念是C ++(和C)的基礎,因此,如果您不了解該區別,請立即在網上搜索有關它的信息,以免進一步混淆。

編輯: 舊答案:

您確定您確實在執行file << arr[i]而不是file << somethingElse << arr[i]嗎? 因為如果執行后者,則file << somethingElse的靜態類型很可能是std::ostream&而不是std::ofstream& 在這種情況下,解決方案是將operator<< (..., Fraction)更改為接受(並返回)常規std::ostream&而不是std::ofstream&

編輯:另一種可能性:您需要確保從實例化Collection<Fraction>的位置可以看到operator<< (..., Fraction)的聲明(即, operator<<的聲明在其上方)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 二進制“ [”:找不到使用“初始化列表”類型的右側操作數的運算符(或者沒有可接受的轉換) C2679 二進制“-=”:未找到采用“T”類型右側操作數的運算符(或沒有可接受的轉換) 重載插入運算符:未找到采用“ unsigned int”類型的右側操作數的運算符(或者沒有可接受的轉換) 錯誤C2679:binary&#39;=&#39;:找不到運算符,它接受類型&#39;std :: vector &lt;_Ty&gt; *&#39;的右手操作數(或者沒有可接受的轉換) 錯誤 C2679:二進制“&lt;&lt;”:未找到采用“RatNum”類型的右側操作數的運算符(或沒有可接受的轉換) 錯誤C2679二進制&#39;=&#39;:找不到使用&#39;int&#39;類型的右側操作數的運算符(或者沒有可接受的轉換) 錯誤:C2679二進制&#39;==&#39;:未找到采用類型為&#39;const std :: string&#39;的右側操作數的運算符(或者沒有可接受的轉換 錯誤C2679:二進制&#39;&gt;&gt;&#39;:未找到采用&#39;const char [4]&#39;類型的右側操作數的運算符(或沒有可接受的轉換)22 c ++錯誤c2679:二進制&#39;[&#39;:未找到采用&#39;SalesItem&#39;類型的右側操作數的運算符(或者沒有可接受的轉換) 錯誤C2679:二進制&#39;&gt;&gt;&#39;:找不到哪個運算符采用&#39;std :: string&#39;類型的右手操作數(或者沒有可接受的轉換)
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM