Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在命名空间中定义已在cpp文件中定义的函数_C++_Namespaces - Fatal编程技术网

C++ 在命名空间中定义已在cpp文件中定义的函数

C++ 在命名空间中定义已在cpp文件中定义的函数,c++,namespaces,C++,Namespaces,我的目标是在命名空间中从function.cpp声明一个现有函数,这样可以避免名称重复。我不想在名称空间中定义函数,而是在一个单独的文件中定义(在本例中为function.cpp)。我创建了以下示例来表示我在本案例中的努力 我是C++新手,我可能在定义中做了一些错误的事情,很遗憾我没有发现这个问题。任何帮助都将不胜感激 //Header.h int adder(int a, int b); //Main.cpp #包括 #包括“Namespace.h” 使用名称空间橙色; int main(

我的目标是在命名空间中从
function.cpp
声明一个现有函数,这样可以避免名称重复。我不想在名称空间中定义函数,而是在一个单独的文件中定义(在本例中为
function.cpp
)。我创建了以下示例来表示我在本案例中的努力

<>我是C++新手,我可能在定义中做了一些错误的事情,很遗憾我没有发现这个问题。任何帮助都将不胜感激

//Header.h

int adder(int a, int b);
//Main.cpp
#包括
#包括“Namespace.h”
使用名称空间橙色;
int main(){
问题就在这里

使用名称空间橙色

您已经包含了
“Namespace.h”
,它已经包含了
“Header.h”
,因此在Main.cpp文件中实际上包含了

int adder(int a, int b);

namespace orange {
    int adder(int a, int b);
}
这很好,您可以在不同的命名空间中使用相同名称的函数,第一个在全局命名空间中,第二个在
orange
命名空间中

当您说
使用namespace orange;
时,您将从文件中的orange名称空间到全局名称空间的所有内容都带到了全局名称空间,现在,您基本上有两个
int adder(int a,int b);
位于同一位置

当您尝试调用该函数时,编译器会感到困惑,他可以同时调用这两个函数,但不知道您实际需要哪一个

为了克服这个问题,您不应该使用
使用namespace orange;
,而是在实际调用中指定要调用的函数,如果是全局函数,则只需调用

std::cout << adder(7, 5) << "\n";

您不能“移动”定义(或声明)到命名空间。函数(和变量)必须首先在命名空间内声明和定义。要澄清,您想将现有函数声明到命名空间中吗?@user1810087是的,这正是我想要实现的。“我不想在命名空间内声明函数”顺便说一句,你已经用`名称空间橙色{int adder(int a,int b);}`做过了,它是高度不可命令的,因此我不会回答你的问题,但它可以“移动”将函数包含到命名空间中时使用了一些技巧。注意:如果使用这种技术,您将遇到问题!想法是
内容包含到命名空间中,而不使用原始的头文件和实现。不必说太多,请看……您好!非常感谢您的回答!我得到了链接器ror LNK1120在my project.exe中用于未解析的外部。似乎“未找到'adder'的函数定义”是问题所在。您没有
orange::adder
函数的定义,只有声明。是否可以“链接”
function.cpp
中带有名称空间标题的定义?您还可以在
namespace.h
中定义函数,不仅要声明,而且应该将该函数设置为
static
,否则会出现多个定义错误。
//Main.cpp
#include <iostream>
#include "Namespace.h"
using namespace orange;

int main() {
    std::cout << orange::adder(7, 5) << "\n";
}
int adder(int a, int b);

namespace orange {
    int adder(int a, int b);
}
std::cout << adder(7, 5) << "\n";
std::cout << orange::adder(7, 5) << "\n";