Ошибок синтаксиса нет, и это не полный код для Pixel_test.cpp и Pixel.cpp.Неисправности тестов при чтении и записи пользовательского объекта из и в строковый поток
У меня есть только полный файл заголовка.
Испытание, которое терпит неудачу, является assert(actual == correct);
.
Я думал, что проблема связана с файлом Pixel.cpp
в std::ostream&
и std::istream&
.
Я потратил часы, пытаясь понять, почему этот тест не работает, поэтому я пришел сюда, чтобы получить помощь.
Pixel_test.cpp:
stringstream in, out;
string correct;
Pixel pix;
pix.set(5,3,2);
correct = 5,3,2;
out << pix;
string actual = out.str();
assert(actual == correct);
in << (6,4,6);
in >> pix;
assert(pix.getRed() == 6);
assert(pix.getBlue() == 6);
assert(pix.getGreen() == 4);
Pixel.cpp:
std::ostream& operator<<(std::ostream& out, const Pixel& pix)
{
int r, g, b;
r = pix.getRed();
g = pix.getGreen();
b = pix.getBlue();
out << r << g << b;
return(out);
}
std::istream& operator>>(std::istream& out, Pixel& pix)
{
int r, g, b;
pix.setRed(r);
pix.setGreen(g);
pix.setBlue(b);
out >> r >> g >> b;
return out;
}
Pixel.h:
#ifndef PIXEL_H
#define PIXEL_H
namespace imagelab
{
class Pixel
{
public:
Pixel(int r=0, int g=0, int b=0);
void set(int r, int g, int b);
void setRed(int r);
void setGreen(int g);
void setBlue(int b);
int getRed() const;
int getGreen() const;
int getBlue() const;
private:
int rval; // red 0-255
int gval; // green 0-255
int bval; // blue 0-255
};
bool operator== (const Pixel& pix1, const Pixel& pix2);
bool operator!= (const Pixel& pix1, const Pixel& pix2);
std::ostream& operator<< (std::ostream& out, const Pixel& pix);
std::istream& operator>> (std::istream& in, Pixel& pix);
}
#endif
Вы распечатали 'actual' и' correct' на консоли (или посмотрели их значения с помощью отладчика), чтобы узнать, что они были? И если 'correct = 5,3,2;' потерял кавычки вокруг строкового литерала, вы назначаете символ с ASCII значением 2 в строку. –
Каков тип переменной 'correct'? –