小编Mic*_* P.的帖子

类模板中嵌套类的 C++ 友元函数

我遇到以下问题。下面的代码在 gdb 在线上运行良好,但是在本地编译如下:

/.../g++ -std=c++17 -g -O3
/.../Test.cpp -o
/.../Test

产生:

错误: “privateMember”是“ ”
的私有成员Foo<int>::Nested

我还尝试了 VS2019 - 与 g++ 相同的效果(这实际上是一个 clang: Apple clang version 11.0.0 (clang-1100.0.33.8))。

解决此问题的方法是:更改调用(注释“//2”)

make(...) -> make<int>(...)
Run Code Online (Sandbox Code Playgroud)

或者

删除带有注释“//1”的行。

这些修复是相互独立的——只需要应用一个

template <typename T>
class Foo;

template <typename T>
typename Foo<T>::Nested make(T&& t);

template <typename T>
class Foo
{
public:
    class Nested
    {
        int privateMember{5};
        friend Nested make<T>(T&& e);
    };

    Nested k; //1
};

template <typename T>
typename Foo<T>::Nested make(T&& t)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ templates inner-classes friend-function

6
推荐指数
0
解决办法
379
查看次数

返回char*表单C++函数

我有一个简单的问题,但不幸的是我无法在网上找到answear.

const char* foo() const { return "foo"; }
Run Code Online (Sandbox Code Playgroud)

这100%安全吗?

c++ arrays char

2
推荐指数
1
解决办法
81
查看次数

标签 统计

c++ ×2

arrays ×1

char ×1

friend-function ×1

inner-classes ×1

templates ×1