以下测试代码创建服务器和clientocket。然后客户端向服务器和服务器回复发送消息。就这样。但我无法编译。线程函数中的所有ASSERT_EQ
都会引发错误"error: void value not ignored as it ought to be"
。我不知道这应该告诉我什么。这里有什么问题?类型无关紧要,因为ASSERT_EQ(1, 1);
也会引发错误。
编辑在谷歌的常见问题解答中找到了这个:
问:我的编译器抱怨“无法忽略空值,因为它应该是。”这是什么意思?
答:您可能在不返回void的函数中使用ASSERT_XY()。 ASSERT_XY()只能在void函数中使用。
我怎么理解这个?
void * serverfunc(void * ptr);
void * clientfunc(void * ptr);
TEST(netTest, insert)
{
pthread_t mThreadID1, mThreadID2;
::pthread_create(&mThreadID1, nullptr, serverfunc, nullptr);
::sleep(1);
::pthread_create(&mThreadID1, nullptr, clientfunc, nullptr);
::pthread_join(mThreadID1, nullptr);
::pthread_join(mThreadID2, nullptr);
}
void * serverfunc(void * ptr)
{
net::ServerSocket serv(IPV4, TCP, 55555,5);
net::ServerSocket * conn = serv.accept();
net::Message msg;
conn->recvmsg(&msg);
ASSERT_EQ(msg.size(),5);
ASSERT_EQ(msg[0],1);
ASSERT_EQ(msg[1],2);
ASSERT_EQ(msg[2],3);
ASSERT_EQ(msg[3],4);
ASSERT_EQ(msg[4],5);
msg = {9,8,6};
ASSERT_EQ(msg.size(),3);
ASSERT_EQ(msg[0],9);
ASSERT_EQ(msg[1],8);
ASSERT_EQ(msg[2],6);
conn->sendmsg(msg);
::sleep(1);
delete conn;
return 0;
}
void * clientfunc(void * ptr)
{
net::ClientSocket clie(IPV4, TCP, "localhost",55555);
net::Message msg;
msg = {1,2,3,4,5};
ASSERT_EQ(msg.size(),5);
ASSERT_EQ(msg[0],1);
ASSERT_EQ(msg[1],2);
ASSERT_EQ(msg[2],3);
ASSERT_EQ(msg[3],4);
ASSERT_EQ(msg[4],5);
clie.sendmsg(msg);
clie.recvmsg(&msg);
ASSERT_EQ(msg.size(),3);
ASSERT_EQ(msg[0],9);
ASSERT_EQ(msg[1],8);
ASSERT_EQ(msg[2],6);
return 0;
}
答案 0 :(得分:6)
问:我的编译器抱怨“无法忽略空值,因为它应该是。” 这是什么意思?
答:你可能在没有的函数中使用ASSERT_XY() 返回无效。 ASSERT_XY()只能在void函数中使用。
我怎么理解这个?
你的函数不返回void
,它们返回void*
- 即它们返回一些东西(void*
是一个指向任何东西的指针),而它们应该什么都不返回。常见问题解答说,使用ASSERT_EQ()的函数需要void
返回类型。
答案 1 :(得分:1)
我也有同样的问题,我发现了一种“丑陋”的解决方法:
void* your_func(void* ptr)
{
_your_func(ptr);
reutrn NULL;
}
void _your_func(void* ptr)
{
...
ASSERT_EQ(1, 1);
...
}
答案 2 :(得分:0)
看起来ASSERT_EQ只能在具有正确返回类型的函数中调用(当你返回void *时,它看起来是无效的)
我个人不喜欢宏过度使用,但就是这样。宏的问题是它混淆了代码,所以你无法看到它做错了什么。
所以只需编写这样的函数并获取serverfunc和clientfunc来调用它。
答案 3 :(得分:0)
根据建议,您应该使用void*
替换void
类型的方法,将return 0
替换为return
。