繁体   English   中英

我如何解决此错误“未在此范围内声明”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM