我有这个代码。如何在不创建错误的情况下执行此操作?
int function1() {
if (somethingtrue) {
function2();
}
}
int function2() {
//do stuff
function1();
}
答案 0 :(得分:8)
这是前瞻性声明的案例。前向声明告诉编译器该名称将存在,它的类型是什么,并允许您在定义它之前在有限的上下文中使用它。
int function2(); // this lets the compiler know that that function is going to exist
int function1() {
if (somethingtrue) {
function2(); // now the compiler know what this is
}
}
int function2() { // this tells the compiler what it has to do now when it runs function2()
//do stuff
function1();
}
答案 1 :(得分:3)
使用forward declaration。您可以在使用之前声明一个函数,只需编写其签名,然后使用分号。有了这个,你向编译器保证在其他地方会有一个具有相同签名的函数定义。
int function2();
int function1() {
if (somethingtrue) {
function2();
}
}
int function2() {
//do stuff
function1();
}
答案 2 :(得分:2)
将它放在你的功能之上:
int function1();
int function2();
但不要创造无限循环!
使用这两行,您告诉编译器将来function1
和function2
将定义。在较大的项目中,您将使用头文件。你也可以这样做,但可以在多个文件中使用这些功能。
也不要忘记退货声明。我认为你的代码示例只是演示,但我只想提一下。
在C ++中,您必须单独声明和定义。 在此处阅读更多相关信息:https://stackoverflow.com/a/1410632/4175009
答案 3 :(得分:1)
首先声明第二个函数,因此它可以看到它的存在。
int function2();
int function1() {
if (somethingtrue) {
function2();
}
}
int function2() {
//do stuff
function1(); //beware of double recursion.
}
答案 4 :(得分:1)
int function2();
int function1() {
if (somethingtrue) {
function2();
}
}
int function2() {
//do stuff
function1();
}
这称为前向声明。您让编译器知道有一个名为function2()
的函数,而不是定义它。这足以让编译器在function1()
内调用该函数时插入该函数,然后在链接时解析该函数。
答案 5 :(得分:1)
转发声明功能2()。
int function2(); //forward declaration
int function1() {
if (somethingtrue) {
function2();
}
}
int function2() {
//do stuff
function1();
}
答案 6 :(得分:1)
这将解决您的问题:
int function2();
int function1() {
if (true) {
function2();
}
}
int function2() {
//do stuff
function1();
}
答案 7 :(得分:0)
通常的做法是先声明你的函数。 一般约定是将声明放在*.h 文件中,定义放在*.cpp 文件中。 然后在 *.cpp 文件中包含 *.h 文件。 这样您也可以在其他文件中使用 function1 和 function2,而无需重复声明。您只需在其他文件中包含 functions.h。
// functions.h
int function1();
int function2();
// functions.cpp
#include "functions.h"
int function1() {
if (somethingtrue) {
function2();
}
}
int function2() {
//do stuff
function1();
}
但是,如果您有很多功能并且想要快速而肮脏的解决方法,您可以这样做:
class Root{public:
int function1() {
if (somethingtrue) {
function2(); /// That will work now
}
}
int function2() {
//do stuff
function1();
}
/// You can also put here variables, structs, classes, etc.
/// and they will see each other regardless of order in code.
/// But don't put main here
/// it won't work
} root;
/// but now to call functoin1 or function2 from outside we need to use root
void main(){
root.function1();
}
Root
和 root
只是这里的一个例子。您可以使用任何未使用的类名和变量名。