我正在做像leetcode这样的在线编程测试,它只需要一个.cpp文件,所以我必须将所有内容放入一个.cpp文件中。
我曾经在任何其他函数之前编写main()
函数,但这样我必须转发声明我使用的每个函数,这很烦人。所以我想到了下面的片段:
namespace function;//oop,there is no such forward declaration
int main()
{
using namespace function;//compiler could not find this actually;
f1();
...
}
namespace function
{
f1(){...};
f2(){...};
...
}
但是编译器抱怨,因为没有命名空间的前向声明(与函数不同(,这使得命名空间对编译器不可见。
有什么方法可以转发声明命名空间吗?就像
void f1();
int main()
{
f1();//ok,because there is a forward declaration
}
void f1()
{ ...}
最接近前向声明namespace
的事情是依赖于它们可以拆分(与class
声明不同(的事实,甚至可以拆分为不同的翻译单元!因此你可以写
namespace funcion // [sic]
{
}
在main
之前.注意好牙套。
如果最重要的目标不必转发声明函数,则可以滥用这样一个事实,即类还定义了命名空间范围,而不必转发声明成员函数。
像这样:
struct program
{
int main()
{
f1();
f2();
return 0;
}
void f1(){}
void f2(){}
};
// The real main still needed here
int main()
{ return program{}.main(); }
从技术上讲,这是有效的,但仍然不推荐。
这不会解决你的问题。
您可以像这样更早地声明命名空间:
namespace function {};
int main()
{
using namespace function;
f1();
}
namespace function
{
void f1() {}
}
但f1
仍未在main
中宣布.
如何将函数声明提取到头文件并包含它?
somefile.h
#pragma once
namespace function {
void f1();
};
somefile.cpp
#include "somefile.h"
int main()
{
using namespace function;//compiler could not find this actually;
f1();
}
namespace function
{
void f1() {}
}
所以我必须将所有内容放入一个.cpp文件中
然后忘记#include
并执行以下操作之一:
a. 将声明namespace function { void f1(); }
放在int main()
上面,将定义(函数体(放在下面int main()
b. 将int main()
放在最后,这样就不需要其他声明