系统是:Linux / CentOS 6.4
我一直在为范围内未声明的函数收到错误。在另一个函数中调用函数是不合法的吗?我读了一篇关于函数的文章,认为这是因为我需要在调用函数时声明函数为void,但是我收到了新的错误。不确定我是否需要将它们声明为全局或其他内容。
client.cpp:32:错误:未在此范围内声明'takef'
client.cpp:33:错误:'putf'未在此范围内声明
client.cpp:在函数'void takef(int&)'中:
client.cpp:44:错误:未在此范围内声明“testa”
client.cpp:在函数'void putf(int&)'中:
client.cpp:70:错误:未在此范围内声明'test'
我正在尝试实现的代码类型示例
sem_t mutex;
sem_t S;
char buffer[1024];
void error(const char *msg)
{
perror(msg);
exit(0);
}
/*void signal_callback_handler()
{
close(sockfd);
}*/
void father(int &sockfd)
{
while(1)
{
srand(time(NULL));
int ms= rand() % 2000 + 5000
send(sockfd, DATA, strlen(DATA), 0);
usleep(1000*ms);
takef(sockfd);
putf(sockfd);
}
}
void takef(int &sockfd)
{
*
*
* *Other code*
*
*
*
testa(sockfd);
* *Other code*
*
*
*
}
void testa(int &sockfd)
{
*
*
*
* *Other code*
*
*
*
}
void putf(&sockfd)
{
*
*
*
* *Other code*
*
*
*
test();
test();
sem_post(&mutex);
}
int main(int argc, char *argv[])
{
*
*
*
* *Other code*
*
*
*
father(sockfd);
return 0;
}
答案 0 :(得分:2)
简单修复。将函数定义移到void father()函数
之上代码
sem_t mutex;
sem_t S;
char buffer[1024];
void error(const char *msg)
{
perror(msg);
exit(0);
}
/*void signal_callback_handler()
{
close(sockfd);
}*/
void takef(int &sockfd)
{
*
*
* *Other code*
*
*
*
testa(sockfd);
* *Other code*
*
*
*
}
void testa(int &sockfd)
{
*
*
*
* *Other code*
*
*
*
}
void putf(&sockfd)
{
*
*
*
* *Other code*
*
*
*
test();
test();
sem_post(&mutex);
}
void father(int &sockfd)
{
while(1)
{
srand(time(NULL));
int ms= rand() % 2000 + 5000
send(sockfd, DATA, strlen(DATA), 0);
usleep(1000*ms);
takef(sockfd);
putf(sockfd);
}
}
int main(int argc, char *argv[])
{
*
*
*
* *Other code*
*
*
*
father(sockfd);
return 0;
}
或者如下所述,另一种选择是编写函数原型。这类似于如何在头文件中编写函数原型,然后在.cpp文件中定义函数。函数原型是一个没有主体的函数,让编译器知道函数存在但尚未定义。
以下是使用原型设计的示例
sem_t mutex;
sem_t S;
char buffer[1024];
void error(const char *msg)
{
perror(msg);
exit(0);
}
/*void signal_callback_handler()
{
close(sockfd);
}*/
// Prototypes
void takef(int &sockfd);
void testa(int &sockfd);
void putf(&sockfd);
void father(int &sockfd)
{
while(1)
{
srand(time(NULL));
int ms= rand() % 2000 + 5000
send(sockfd, DATA, strlen(DATA), 0);
usleep(1000*ms);
takef(sockfd);
putf(sockfd);
}
}
void takef(int &sockfd)
{
*
*
* *Other code*
*
*
*
testa(sockfd);
* *Other code*
*
*
*
}
void testa(int &sockfd)
{
*
*
*
* *Other code*
*
*
*
}
void putf(&sockfd)
{
*
*
*
* *Other code*
*
*
*
test();
test();
sem_post(&mutex);
}
int main(int argc, char *argv[])
{
*
*
*
* *Other code*
*
*
*
father(sockfd);
return 0;
}
答案 1 :(得分:2)
在C ++中,您需要在使用它们之前声明它们。 在开始定义任何函数之前,请包含函数的原型。