How do I fix the error "was not declared in this scope"?

The system is: Linux/CentOS 6.4 I keep getting an error for functions not declared in scope. Is it not legal to call a function within another function? I read an article on function, thought it was because I needed to declare the functions void when I call them, but I received new errors. I am not sure if I need to declare them global or something.

client.cpp:32: error: 'takef' was not declared in this scope
client.cpp:33: error: 'putf' was not declared in this scope
client.cpp: In function 'void takef(int&)':
client.cpp:44: error: 'testa' was not declared in this scope
client.cpp: In function 'void putf(int&)':
client.cpp:70: error: 'test' was not declared in this scope
Example of the type of code I'm trying to implement:
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; >
31.5k 22 22 gold badges 109 109 silver badges 132 132 bronze badges asked Aug 2, 2013 at 21:47 user2644360 user2644360 71 1 1 gold badge 2 2 silver badges 9 9 bronze badges Declare them before they are used. Commented Aug 2, 2013 at 21:48 possible duplicate of 'foo' was not declared in this scope c++ Commented Aug 2, 2013 at 21:48

2 Answers 2

Simple fix. Move the function definitions above the void father() function.

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; >

Or another alternative, like mentioned below, is to write a function prototype. This is similar to how one would write a prototype for functions in a header file and then define the functions in a .cpp file. A function prototype is a function without a body and lets the compiler know the function exists but is not defined yet.

Here is an example using prototyping

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; >