在C ++中使用该命名空间链接包含命名空间定义的文件与另一个文件的问题?

时间:2011-02-14 17:10:12

标签: c++ namespaces static-linking

我有两个文件,一个名为test.cpp,另一个名为ani.cpp。

test.cpp如下:

#include<iostream>

namespace Anirudh{

    void start(){
        std::cout<<"This is the start function of the namespace Anirudh\n";
    }
}

文件 ani.cpp如下

#include<iostream>

using namespace Anirudh;
int main(){

    start();
    return 0;
}

这就是我在终端上做的事情

anirudh@anirudh-Aspire-5920:~/Desktop/testing$ g++ -c test.cpp
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ g++ test.o ani.cpp 
ani.cpp:3: error: ‘Anirudh’ is not a namespace-name
ani.cpp:3: error: expected namespace-name before ‘;’ token
ani.cpp: In function ‘int main()’:
ani.cpp:6: error: ‘start’ was not declared in this scope
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ 

这是我第一次尝试在C ++中定义自己的命名空间并在另一个代码中使用它。我在我的#include "test.cpp"文件中ani.cpp之后运行了我的代码,但我想将test.cpp的目标代码与ani.cpp相关联,而不是将其包含在ani.cpp中 我甚至尝试了extern命名空间Anirudh;但那没用。当然有一种正确的方式来链接它们,我现在还不知道。所以请赐教。提前谢谢。

3 个答案:

答案 0 :(得分:0)

ani.cpp内,您在执行namespace Anirudh之前从未告诉编译器程序中的其他位置using。如果你习惯了其他模块系统,这可能看起来很古怪。

你可以做的是在调用它之前声明命名空间+函数,在using namespace中的ani.cpp之前使用这些行

namespace Anirudh{    
    void start();
}

这些声明通常会包含在标题中,但这个简单示例可能不需要这样做。

答案 1 :(得分:0)

如何对函数进行原型设计:

namespace Anirudh {
    void start();
} // namespace Anirudh

int main(...){
//...

答案 2 :(得分:0)

如果您没有头文件,那么您至少要做的是:在调用函数原型之前,在ani.cpp中编写函数的原型,

using namespace Anirudh;

void Anirudh::start();

int main(){

    start();
    return 0;
}