c++命名空间从不同的源文件

c++ namespace from different source file

本文关键字:源文件 命名空间 c++      更新时间:2023-10-16

我有一个名为test1.cpp的文件

namespace a {
int main1() {
    return 3;
}
}

还有另一个文件test2。cpp

#include <stdio.h>
using a::main1;
int main() {
    printf("%d", a::main1());
}

然后我得到一个编译错误说'a' has not been declared与g++。请帮我找出我在这里错过了什么,以及通常如何做到这一点。

谢谢。

您必须在头文件中声明命名空间,类和函数,并将其包含在test2.cpp文件中。

您需要在头文件中声明a::main1,将其命名为test1.h,然后将该头文件包含在test2.h中。否则test2无法知道你在test1中声明了什么。

test1.h

namespace a {
int main1();
}

test1.cpp

namespace a {
int main1() {
    return 3;
}
}

test2.cpp

#include <stdio.h>
#include test1.h
using a::main1;
int main() {
    printf("%d", a::main1());
}

你的函数main1()是在名称空间'a'中声明的,所以当你在printf()中调用它时,你需要确保编译器知道要在哪个名称空间中查找它。(据我所知)有两种方法:

  1. 您可以使用::显式调用命名空间,就像您所做的那样:

    printf ("%d", a::main1());
    
  2. 或者你可以,在它第一次使用的地方,告诉编译器通常在'a'命名空间中查找符号,使用以下行:

    using namespace a;
    

当我同时使用这两种技术时,我使用的编译器(MS Studio 2008)没有抱怨。

我相信你得到错误的原因是你的"using"语句没有正确地为编译器形成(见上文)。