Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我如何处理这个Linux C++;警告&引用;can';在'&引用;_C++_Eclipse_Linker Warning - Fatal编程技术网

C++ 我如何处理这个Linux C++;警告&引用;can';在'&引用;

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_

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_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中收到了同样的警告。