【发布时间】:2018-11-06 02:41:20
【问题描述】:
我正在解决一个问题,即 A 类和 B 类在命名空间 test0 中声明,而 A 类的友元函数 f 在命名空间 test1 中声明。函数 f 接收 B 类对象的引用作为参数。这是一个简化的例子。
namespace test0 {
class B;
}
namespace test1 {
void f(test0::B& b);
}
namespace test0 {
class A {
friend void test1::f(test0::B& b);
};
}
该代码适用于 g++。但是nvcc给出如下编译错误。
a.cu:11:22: error: ‘B’ has not been declared
friend void test1::f(test0::B& b);
^
a.cu:11:27: error: ‘void test1::f(int&)’ should have been declared inside ‘test1’
friend void test1::f(test0::B& b);
^
你能帮我找出问题所在吗?提前谢谢你。
【问题讨论】:
-
不应该是
friend void test1::f(B& b);吗?您位于 test0 命名空间中,因此编译器可能会感到困惑。或friend void test1::f(::test0::B& b);以确保解析来自全局命名空间。第二个错误很可能是第一个错误的结果。 -
@Yksisarvinen 第二个错误是第一个错误的结果。
friend void test1::f(::test0::B& b);引发与原始错误相同的错误。friend void test1::f(B& b);即使使用 g++ 也不起作用。
标签: c++ compiler-errors cuda nvcc friend-function