Скажем, у меня есть класс B, который включает массив класса A, я хочу использовать std :: wostringstream для вывода данных в классе BI, перегрузили оператор << для класса B, но я просто получите ошибку 'E0349' и 'C2679'. </p>
Определение класса A
class A
{
public:
A();
~A();
inline A(float _x, float _y, float _z) :
x(_x), y(_y), z(_z)
{
}
inline void Set(float _x, float _y, float _z);
float x, y, z;
friend std::ostream& operator<<(std::ostream& out, const A& source);
friend std::wostringstream& operator<<(std::wostringstream& out, const A& source);
private:
};
Определение класса B
class B
{
public:
A* ArrayOfA;
bool Initialize(const A* samples,
unsigned int count);
friend std::wostringstream& operator<<(std::wostringstream& out, const B& source);
B();
~B();
private:
};
Как видите, класс B есть массив класса A. Я перегрузил оператор << для класса A </p>
std::wostringstream&
operator<<(std::wostringstream& out, const A& source)
{
out << '<' << source.x << ',' << source.y << ',' << source.z << '>';
return out;
}
Теперь я хочу использовать класс B, например
std::wostringstream wss;
wss << ClassB
Но я не могу.
Вот код ошибки, у меня есть оператор перегрузки << для класса B </p>
std::wostringstream&
operator<<(std::wostringstream& out, const B& source)
{
for (unsigned int i = 0; i < 4; ++i)
{
out << ":" << source.ArrayOfA[i] << std::endl;
//ERROR:E0349 no operator "<<" matches these operands
//ERROR:C2679 binary '<<' : no operator found which takes a right-hand operand of type'A' (or there is no acceptable conversion)
}
return out;
}
Вот полный код, это онлайн-компилятор. немного длинного образца кода, но с деталями
полный код находится в URL. Что не так? Как бы вы отправили ArrayOfA на std :: wostringstream ? Если вы просто используете только std :: ostream, как бы вы получили содержимое строки, например std :: wostringstream ? Что-то не так с моей перегрузкой оператора? Большое спасибо за чью-то помощь!