我尝试编译以下代码:
#include <cppunit/extensions/HelperMacros.h>
#include "tested.h"
class TestTested : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(TestTested);
CPPUNIT_TEST(check_value);
CPPUNIT_TEST_SUITE_END();
public:
void check_value();
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestTested);
void TestTested::check_value() {
tested t(3);
int expected_val = t.getValue(); // <----- Line 18.
CPPUNIT_ASSERT_EQUAL(7, expected_val);
}
结果我得到了:
testing.cpp:18:32: Error: void-value is not ignored where it should be
EDDIT
为了完成示例,我发布了tested.h
和tested.cpp
的代码:
tested.h
#include <iostream>
using namespace std;
class tested {
private:
int x;
public:
tested(int int_x);
void getValue();
};
tested.cpp
#include <iostream>
using namespace std;
tested::tested(int x_inp) {
x = x_inp;
}
int tested::getValue() {
return x;
}
答案 0 :(得分:4)
您在测试的类中声明void getValue();
..更改为int getValue();
。
答案 1 :(得分:1)
void函数不能返回值。 您从API getValue()获取int值,因此它应返回一个int。
答案 2 :(得分:1)
您的类定义与实现不匹配:
在您的标题中,您已按以下方式声明它(另外,您可能希望查看一些命名约定。)
class tested {
private:
int x;
public:
tested(int int_x);
void getValue();
};
您已将getValue()
声明为void
,即无法返回。 getter
什么都不返回没有多大意义,是吗?
但是,在.cpp
文件中,您实现了getValue()
,如下所示:
int tested::getValue() {
return x;
}
您需要更新标头类型中的getValue()
方法签名,以使其返回类型与实现(int
)匹配。