如何访问其他.cc文件中的命名空间中定义的函数

时间:2019-02-12 23:32:38

标签: c++

我有一个名为test.cc的文件

#include <stdio.h>

int doit(){
    return 4;
}

namespace abc {
    int returnIt(int a){
        return a;
    }
}

我可以使用doit(),但是如何在不使用.h文件的情况下在main.cc中的命名空间中使用此函数:

using namespace abc;
int doit();
int main(int argc, const char * argv[]) {
    cout<<returnIt(3)<<endl; // print 3
    cout<<doit();            // print 4
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您可以通过先声明函数来调用它们。示例:

namespace abc {
    int returnIt(int a); // function declaration
}

int main() {
     abc::returnIt(3);     // the declared function can now be called

请注意,声明必须与程序中其他地方使用的声明完全相同。为了在翻译单元之间实现相同的声明,通常将声明放入一个单独的文件(称为标头)中,并在需要该声明时使用预处理器将该文件包括在内。

答案 1 :(得分:-1)

您所需要的只是简单地在main函数之前编写函数。这样,编译器在主程序遇到函数原型之前就已经对其进行了处理,并且可以验证函数调用。

int doit()
{
  return 4;
}

int returnIt(int a)
{
    return a;
}


int main(int argc, const char * argv[])
{
  cout<<returnIt(3)<<endl; // print 3
  cout<<doit();            // print 4
  return 0;
}

通常,避免使用using namespace;。由于不正确的变量/函数用法,它使代码可能被破坏或变得可读性较差。那是因为太多的符号可以占据相同的(全局)范围。

如user4581301所指出,如果需要使用另一个库,则使用eerorika answer/method可能会更简单。