有没有办法在单独的.h和.cpp文件中定义名称空间中声明的函数?

时间:2016-03-15 08:53:47

标签: c++ namespaces

我仍然是c ++的许多领域的新手,一个是一般的.cpp和.h文件组织。

我正在创建一个带有一些结构和函数的命名空间。我想在类似于

的.h文件中声明命名空间
//objectname.h
namespace ObjectName
{
   Object Function(arguments);
}
function.h中的

声明

//function.h
//includes declarations used in the function definition as well
//as possibly a redundant function declaration.
Object Function(arguments);

然后是function.cpp中的定义

//function.cpp
#include "Function.h"
Object Function(arguments)
{
  ....
}

这样你就可以在objectname.h中抽象地看到命名空间,在function.h中使用特定声明,在function.cpp.中使用函数定义。我们非常感谢任何建议。 (也是基于Windows的c ++)

2 个答案:

答案 0 :(得分:2)

这很好

<h1>Number {{$ctrl.number}}</h1>
Plural Component <ng-pluralize
    count="$ctrl.number"
    when-0="00"
    when-one="11"
    when-few="22"
    when-many="33"
    when-other="44">
</ng-pluralize>

根本不需要function.h。如果要将命名空间拆分为多个文件,可以这样做:

//objectname.h
namespace ObjectName
{
   Object Function(arguments);
}

换句话说,您需要再次将声明包装在命名空间中。 (这是一个提前的话题。我不会这样做。)

Function.cpp只需说它定义的函数:

//function.h
//includes declarations used in the function definition as well
//as possibly a redundant function declaration.
namespace ObjectName
{
   Object Function(arguments);
}

请注意,使用标头文件的语句为//function.cpp #include "ObjectName.h" Object ObjectName::Function(arguments) { .... } ,而非#include

答案 1 :(得分:0)

它不是如何工作的:你的function.h在全局命名空间中定义另一个 Function。拥有两个具有相同名称的函数正是命名空间的用途 - 如果任何其他库中已经存在Function,则库编写并不需要担心。

由于你的.cpp只定义了两个namespace std中的一个,另一个未定义,并在调用时会出现链接错误。

请注意,您无需定义&#34;一次命名空间。以<vector>为例,其内容可在例如{1}中找到。 <list><iostream>namespace N { int x; } namespace N { int y; }。这是可能的,因为与类不同,可以重新打开命名空间。 $results = []; //$result = array() if using below php 5.4 foreach ($comments as $comment) { $results[$comment->comment_article_id][] = $comment; } ksort($result); //to sort from lowest highest article id 有效。