我正在进行在线编程测试,例如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()
{ ...}
答案 0 :(得分:3)
最接近声明namespace
的事情是依赖于它们可以被分割(与class
声明不同),甚至可以分成不同的翻译单元!因此你可以写
namespace funcion // [sic]
{
}
在main
之前。请注意大括号。
答案 1 :(得分:2)
如果不必转发声明函数是最重要的目标,那么您可以滥用这样一个事实:类也定义了一个名称空间范围,您不必转发声明成员函数。
这样的事情:
struct program
{
int main()
{
f1();
f2();
return 0;
}
void f1(){}
void f2(){}
};
// The real main still needed here
int main()
{ return program{}.main(); }
从技术上讲,这有效,但仍然没有真正推荐。
答案 2 :(得分:1)
这不会解决您的问题。
您可以像这样声明命名空间:
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
并执行以下操作之一:
一个。将声明namespace function { void f1(); }
置于int main()
之上,将定义(功能正文)置于int main()
湾把int main()
放在最后,这样就不需要额外的声明了