C ++命名空间和Friend函数的组合会产生链接错误

时间:2019-03-08 18:17:38

标签: namespaces linker-errors friend

在标准项目中尝试使用VC2013编译以下文件时,出现链接错误。

A.h

namespace ns {
    class A {
    public:
        int n_; A(int n);
        friend int test_function(A C);
    };
}

A.cpp

#include "A.h"     
using namespace ns;

A::A(int n) { n_ = n;}

int test_function(A C) {
    return C.n_;
}

main.cpp

#include "A.h"
using namespace ns;

int main(int argc, char *argv[]) {
    test_function(A::A(5));
    return 0;
}

但是如果我在int test_function(A C)中将int ns::test_function(A C)更改为A.cpp,则会进行编译。为什么这样工作?是好的风格吗?

0 个答案:

没有答案