有没有办法在单独的.h和.cpp文件中定义命名空间中声明的函数? 我对C++的许多领域还有一个新的概念,一个是一般的.CPP和.h文件组织。p>

有没有办法在单独的.h和.cpp文件中定义命名空间中声明的函数? 我对C++的许多领域还有一个新的概念,一个是一般的.CPP和.h文件组织。p>,c++,namespaces,C++,Namespaces,我正在用一些结构和函数创建一个名称空间。我想在一个.h文件中声明与此类似的名称空间 //objectname.h namespace ObjectName { Object Function(arguments); } 函数中的声明 //function.h //includes declarations used in the function definition as well //as possibly a redundant function declaration. Obje

我正在用一些结构和函数创建一个名称空间。我想在一个.h文件中声明与此类似的名称空间

//objectname.h
namespace ObjectName
{
   Object Function(arguments);
}
函数中的声明

//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++)

它不是这样工作的:您的function.h在全局命名空间中定义了另一个
函数。拥有两个同名函数正是名称空间的用途——如果任何其他库中已经存在
函数,则编写库时无需担心

由于.cpp只定义了两个
函数
s中的一个,所以另一个函数未定义,调用时会给出链接错误


请注意,您不需要一次“定义”一个名称空间。以
名称空间std
为例,其内容可在
中找到。这是可能的,因为与类不同,命名空间可以重新打开
名称空间N{int x;}名称空间N{int y;}
有效。

它不是这样工作的:您的函数.h在全局名称空间中定义了另一个
函数。拥有两个同名函数正是名称空间的用途——如果任何其他库中已经存在
函数,则编写库时无需担心

由于.cpp只定义了两个
函数
s中的一个,所以另一个函数未定义,调用时会给出链接错误

请注意,您不需要一次“定义”一个名称空间。以
名称空间std
为例,其内容可在
中找到。这是可能的,因为与类不同,命名空间可以重新打开
名称空间N{int x;}名称空间N{int y;}
有效。

这很好

//objectname.h
namespace ObjectName
{
   Object Function(arguments);
}
你根本不需要函数。如果要将命名空间拆分为多个文件,请执行以下操作:

//function.h
//includes declarations used in the function definition as well
//as possibly a redundant function declaration.
namespace ObjectName
{
   Object Function(arguments);
}
换句话说,您需要在名称空间中再次包装声明。(这是一个预先讨论的话题,我不会这么做。)

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

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

这很好

//objectname.h
namespace ObjectName
{
   Object Function(arguments);
}
你根本不需要函数。如果要将命名空间拆分为多个文件,请执行以下操作:

//function.h
//includes declarations used in the function definition as well
//as possibly a redundant function declaration.
namespace ObjectName
{
   Object Function(arguments);
}
换句话说,您需要在名称空间中再次包装声明。(这是一个预先讨论的话题,我不会这么做。)

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

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

请注意,使用头文件的语句是
#include
,而不是
使用

来证明其原因是这样的。这些方法相当长,只需解析数据。我认为为名称空间中的每个方法都有一个.h/.cpp对是合适的。对于一般的文件保存,以方法命名文件。对于函数,使用名称空间的作用域与类的作用域非常相似,尤其是
静态
类函数。换句话说,您需要实际指定名称空间范围。所以我需要对
function.h
function.cpp
文件进行更改?我是否应该使用完全限定名在相应的文件中声明/定义它们?类似于
function.h
对象ObjectName::function(参数)
?我不认为首先需要
function.h
,您不能直接包括
objectname.h
?或者可能将其包含在
function.h
中?是的,这是一个错误,抱歉@Joachim PileborgAlso要证明其中的一些原因,就是这样。这些方法相当长,只需解析数据。我认为为名称空间中的每个方法都有一个.h/.cpp对是合适的。对于一般的文件保存,以方法命名文件。对于函数,使用名称空间的作用域与类的作用域非常相似,尤其是
静态
类函数。换句话说,您需要实际指定名称空间范围。所以我需要对
function.h
function.cpp
文件进行更改?我是否应该使用完全限定名在相应的文件中声明/定义它们?类似于
function.h
对象ObjectName::function(参数)
?我不认为首先需要
function.h
,您不能直接包括
objectname.h
?或者可能将其包含在
function.h
中?是的,这是个错误,抱歉@Joachim PileborgOk,但是如果我想将所有声明保存在一个.h文件中,我可以使用一次#pragma吗?还有头文件和.cpp中的定义和声明呢?@marshallcraft:
#pragma once
是头保护的一种不可移植的替代方法,而不是让代码突然具有另一种含义的魔法。对于.cpp文件中的头和定义中的声明,是的,这仍然完全适用。好吧,但是如果我想将一个包含所有声明的.h文件保存在一个地方,我可以使用一次#pragma吗?还有头文件和.cpp中的定义和声明呢?@marshallcraft:
#pragma once
是头保护的一种不可移植的替代方法,而不是让代码突然具有另一种含义的魔法。对于头文件中的声明和.cpp文件中的定义,是的,这仍然完全适用。我可以格式化项目,因为我想有一个单独的(但多余的)文件。正如我所说的,原因很简单,就是为了让事情对我来说更简单,因为我有一个si