【发布时间】:2011-10-08 13:55:10
【问题描述】:
我在尝试编译 c++ UDP 客户端程序时遇到一个奇怪的编译器错误。
g++ -o 客户端 Udp.cpp ClientMain.c -I. -lpthread
在 ClientMain.c:1:0 中包含的文件中:
Udp.h:在析构函数“CUdpMsg::~CUdpMsg()”中:
Udp.h:103:43: 错误:此范围内未声明“免费”
Udp.h:在成员函数‘void CUdpMsg::Add(in_addr_t, const void*, size_t)’中:
Udp.h:109:34: 错误:“malloc”未在此范围内声明
Udp.h:109:41: 错误:“memcpy”未在此范围内声明
ClientMain.c:在函数'int main(int, char**)'中:
ClientMain.c:28:57: 错误:'memcpy' 未在此范围内声明
ClientMain.c:29:61: 错误:'printf' 未在此范围内声明
ClientMain.c:30:17:错误:“stdout”未在此范围内声明
ClientMain.c:30:23: 错误:'fflush' 未在此范围内声明
ClientMain.c:34:68: 错误:'printf' 未在此范围内声明
ClientMain.c:35:17: 错误:“stdout”未在此范围内声明
ClientMain.c:35:23: 错误:'fflush' 未在此范围内声明
ClientMain.c:37:30: 错误:“usleep”未在此范围内声明
我在我的 cpp 文件的开头声明了以下内容。
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <ifaddrs.h>
#include <net/if.h>
#include <cstdlib>
#include <string>
#include <stdlib.h>
#include <cstring>
#include <errno.h>
应该在 string.h 中声明像“memcpy”这样的函数...我已经声明了它(以及字符串和 cstring),但我仍然收到这些编译器错误。有谁知道为什么会这样?谢谢。
【问题讨论】:
-
您说您的 "cpp" 文件中包含这些内容,但错误在
ClientMain.c(注意.c,而不是.cpp)中?跨度> -
我认为您需要将其中一些文件包含在
UDP.h -
你是否为这个函数调用指定了std命名空间
-
@triclosan:如果包含 C 标头(即 .h 标头),则无需指定
std::malloc -
@MSalters:我同意。但同时包含
<stdlib.h>和<cstdlib>并不是一个好习惯。
标签: c++ g++ compiler-errors