[英]How do i fix this error “was not declared in this scope”
系统是:Linux / CentOS 6.4
对于未在作用域中声明的函数,我不断收到错误消息。 在另一个函数中调用一个函数是否合法? 我读了一篇有关函数的文章,认为那是因为我在调用它们时需要声明这些函数为空,但是却收到了新的错误。 不知道我是否需要声明它们为全局或其他内容。
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:错误:未在此范围内声明“测试”
我正在尝试实现的代码类型示例
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;
}
简单修复。 将函数定义移到void parent()函数上方
在代码中
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;
}
在C ++中,需要在使用函数之前声明它们。 在开始定义任何功能之前,请包括这些功能的原型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.