我是一名参加c ++课程的新手程序员。
赋值是使用stringstream写一个double,然后使用CppUnitLite中的一个宏来检查它。我想使用CHECK_DOUBLES_EQUAL检查我的写操作中的double,但是VS中的intellisense说它不会'工作。在下面的示例中,我离开了什么工作,一个简单的CHECK_EQUAL。这不够好。我需要使用CHECK_DOUBLES_EQUAL作为浮点。
我已经尝试过CHECK_DOUBLES_EQUAL(dvalue,svalue,0.1),但这不会奏效。我也试过使用预期的实际值,但这也不起作用。
CHECK_DOUBLES_EQUAL适用于读取操作(第二个示例),但我无法在第一个示例中使用它。
这是为什么?我做错了什么?
TEST(writeDouble, stringStream)
{
std::stringstream sValue;
double dvalue =34.9;
sValue << dvalue;
if (!sValue)
{
CHECK_FAIL("conversion failed");
}
CHECK_EQUAL("34.9", sValue.str());
}
TEST(readDouble, stringStream)
{
std::stringstream sValue("34.9");
double dvalue;
sValue >> dvalue;
if (!sValue)
{
CHECK_FAIL("conversion failed");
}
CHECK_DOUBLES_EQUAL(34.9, dvalue, 0.1);
}
答案 0 :(得分:1)
问题是在你的写操作中,你不是要与双重进行比较:你试图与STRING进行比较。 C ++是一种静态类型语言,不会将字符串与double进行比较。
您与CHECK_EQUAL("34.9", sValue.str());
一起使用的代码似乎是用于确保stringstream
正确解释输入double值的正确代码。