我已經看到關於此主題的其他一些線索,但他們無法很好地幫助我。我正在創建一個打印到.html文件的類。我宣稱ostream是朋友,但它仍然無法訪問課程的私人成員。在超載<<運算符時獲得對私人班級成員的訪問權限
我.h文件中
#ifndef OUTPUTTOHTML_H
#define OUTPUTTOHTML_H
#include <iostream>
#include <string>
#include <vector>
using std::string;
using std::vector;
using std::ostream;
namespace wilsonOutput
{
class HTMLTable
{
private:
vector<string> headers;
vector<vector<string> > rows;
//helper method for writing an HTML row in a table
void writeRow(ostream &out, string tag, vector<string> row);
public:
// Set headers for the table columns
void setHeaders(const vector<string> &headers);
// Add rows to the table
void addRow(const vector<string> &row);
//write the table innto HTML form onto an output stream
friend ostream & operator<<(ostream & out, HTMLTable htmlTable);
};
}
#endif
,這就是我在我的main.cpp中(而不是在主代碼塊)來實現過載。
// Overloaded stram output operator <<
ostream & operator<<(ostream &out, wilsonOutput::HTMLTable htmlTable)
{
out << "<table border = \"1\">\n";
// Write the headers
htmlTable.writeRow(out, "th", htmlTable.headers);
// Write the rows of the table
for (unsigned int r = 0; r < htmlTable.rows.size(); r++)
{
htmlTable.writeRow(out, "td", htmlTable.rows[r]);
}
// Write end tag for table
out << "</table>\n";
return out;
}
任何幫助將是相當有益的。
您是否在main.cpp中指定了命名空間名稱? – MarsRover
這個問題已經得到解答,但我可能會指出,按值傳遞'wilsonOutput :: HTMLTable'並不遵循通常的約定(通過const引用傳遞它),並且可能嚴重效率低下。 –
您正在打印對象的副本。考慮使用'const wilsonOutput :: HtmlTable&htmlTable' – PiotrNycz