[英]No operator << matches these operands
我一直在這里閱讀一兩個小時的問題關於我得到的這個錯誤,他們中的大多數都忘了#include string(我已經做過),或者重載<<運算符。
這是有問題的代碼:
void Student::getCoursesEnrolled(const vector<Course>& c)
{
for (int i = 0; i < c.size(); i++)
{
cout << c[i] << endl;
}
}
而我得到的錯誤:
Error: No operator matches these operands
operand types are: std::ostream << const Course
我要做的就是返回矢量。 我讀過關於重載<<運算符但是我們沒有在課堂上學到任何這些,所以我假設有另一種方法可以做到這一點?
我感謝你的時間!
我要做的就是返回矢量。
不完全的; 你正試圖用cout
打印它。 並且cout
不知道如何打印Course
對象,除非你提供一個重載的operator<<
告訴它如何這樣做:
std::ostream& operator<<(std::ostream& out, const Course& course)
{
out << course.getName(); // for example
return out;
}
有關詳細信息,請參閱StackOverflow上的運算符重載聖經 。
流操作符<<
用於“輸出”該對象的某些表示。 如果你不想重載運算符,只需選擇一些屬性來輸出:
for (int i = 0; i < c.size(); i++)
{
cout << c[i].Name << endl; // assuming Name is a property of Course
}
當您重載操作員時,您只需決定Course
的正確表示:
ostream& operator<< (ostream &out, Course &c)
{
out << c.Name "(" << c.Description << ")";
return out;
}
您的Course
類需要實現一個操作符:
class Course
{
public:
/*
* Your code here
*/
// Probably missing this:
friend std::ostream& operator << (std::ostream& os, const Course& course)
{
os << course.name(); // etc..
return os;
};
}; // eo class Course
由於您尚未學習重載operator<<
,因此您可以執行的操作是打印Course
類的每個成員。 你還沒有發布Course
的定義,但也許是這樣的:
class Course
{
public:
int get_number() { return _number; }
const std::string& get_name() { return _name; }
private:
int _number;
std::string _name;
};
然后你可以說:
void Student::getCoursesEnrolled(const vector<Course>& c)
{
for (int i = 0; i < c.size(); i++)
{
cout << c[i].get_number() << " "
<< c[i].get_name() << std::endl;
}
}
問題是operator <<不會重載您嘗試在語句中輸出的類型的Course
對象
cout << c[i] << endl;
您需要重載此運算符或編寫自己的函數,該函數將在std::ostream
輸出類型為Course
的對象
例如,假設下面是類Course
的定義
class Course
{
private:
std::string name;
unsigned int duration;
public:
Course() : duration( 0 ) {}
Course( const std::string &s, unsigned int n ) : name( s ), duration( n ) {}
std::ostream & out( std::ostream &os ) const
{
return ( os << "Course name = " << name << ", course duration = " << duration );
}
};
什么時候可以寫
std::vector<Course> v = { { "A", 1 }, { "B", 2 }, { "C", 3 } };
for ( const Course &c : v ) c.out( std::cout ) << std::endl;
相反,成員函數可以重載operator <<。 例如
class Course
{
private:
std::string name;
unsigned int duration;
public:
Course() : duration( 0 ) {}
Course( const std::string &s, unsigned int n ) : name( s ), duration( n ) {}
friend std::ostream & operator <<( std::ostream &os, const Course & c )
{
return ( os << "Course name = " << c.name << ", course duration = " << c.duration );
}
};
並用它作為
std::vector<Course> v = { { "A", 1 }, { "B", 2 }, { "C", 3 } };
for ( const Course &c : v ) std::cout << c << std::endl;
你的問題是這個特殊的部分:
cout << c[i]
在你的情況下, c[i]
是一個類型為Course
的對象,正如dvnrrs正確指出的那樣。 所以要么:
Course
對象在某種程度上是一個原始的typedef
嘗試顯式地將它轉換為字符串類型(或類似)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.