C++ 我如何处理这个Linux C++;警告&引用;can';在'&引用;
Ubuntu 10.04 32位、eclipse、C和C++ 我有一个程序,它使用select()来监视一组TCP和UDP端口。我使用结构中的sockaddr_以通常的方式(socket()、bind()、listen()、accept()等)创建这些端口 该程序在命令行中运行良好。我正在使用eclipse调试器修复一个bug(现已修复!),这时我注意到以下警告:C++ 我如何处理这个Linux C++;警告&引用;can';在'&引用;,c++,eclipse,linker-warning,C++,Eclipse,Linker Warning,Ubuntu 10.04 32位、eclipse、C和C++ 我有一个程序,它使用select()来监视一组TCP和UDP端口。我使用结构中的sockaddr_以通常的方式(socket()、bind()、listen()、accept()等)创建这些端口 该程序在命令行中运行良好。我正在使用eclipse调试器修复一个bug(现已修复!),这时我注意到以下警告: warning: can't find linker symbol for virtual table for `sockaddr_
warning: can't find linker symbol for virtual table for `sockaddr_in' value
warning: found `operator delete(void*)' instead
嗯,在修复我的错误后,我检查了一下,警告仍然存在
我知道,只要我进入连接端口/套接字的ConfigureServer()例程,警告就会开始。sockaddr_in结构在例程中声明并在堆栈上。事实上,程序中的任何内容都不在堆中。这是C和C++的混合,没有声明或使用的对象到这个点。
这是例行程序的开始。其他端口还有几个相同的附加位
int configureServer()
{
sockaddr_in servAddr;
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons( g_tcpPorts[0].serverPort );
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
/* Create and initialize the TCP socket */
if (( g_tcpPorts[0].serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) < 0 )
{
PLOG( ERROR ) << "failed to acquire a socket for IO Control Server port: " << g_tcpPorts[0].serverPort;
return -1; // caller will CloseAllPorts();
}
// ...........
}
int-configureServer()
{
servAddr中的sockaddr_;
memset(&servAddr,0,sizeof(servAddr));
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(g_tcpPorts[0].serverPort);
servAddr.sin\u addr.s\u addr=htonl(INADDR\u ANY);
/*创建并初始化TCP套接字*/
if((g\u tcpPorts[0].serverSock=socket(AF\u INET,SOCK\u STREAM,IPPROTO\u IP))<0)
{
PLOG(ERROR)在包含在结构中声明sockadd_的头之前,尝试使用extern“C”
extern "C"
{
# include <netinet/in.h>
}
extern“C”
{
#包括
}
这可能会确保SokAdDrIrin没有或需要一个VTAB。
GDB仍然不完美,特别是在调试C++代码时。
在此, SokAdDrIrIn < /C>是“普通的旧数据”(没有任何C++特性的C结构),不需要也不应该有任何虚拟表。如果GDB不这样想,这是GDB的问题。< /P>
(对于不同的结构/类)。我不会太担心它,除非它妨碍了您的调试。
您似乎缺少一个头文件。别担心,它是(无害的)GDB中的错误。@n.m.这是个好消息。如果你把它作为一个答案发布,我会给它一个投票结果和一个最好的答案。你知道GDB中的错误是否仍然存在吗?我在Eclipse中收到了同样的警告。