Комбинация пространства имен и дружественной функции C ++ приводит к ошибке компоновки - PullRequest
0 голосов
/ 08 марта 2019

При попытке скомпилировать следующие файлы с помощью 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, он компилируется.Почему это работает так?Это хороший стиль?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...