gpt4 book ai didi

C++ 嵌套模板 : inaccessible static method

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:15 30 4
gpt4 key购买 nike

我在以下代码中遇到了一个奇怪的(或者可能不是)错误:

template<typename T>
class Registrer {
public:
Registrer() {
Registry::register(T::instance);
}
};

template<typename T>
class RegisteringClass {
private:
static const Registrer<T> REGISTRER;
public:
RegisteringClass () { Q_UNUSED(REGISTRER); /* force static instantiation */ }
static const WhatEver *instance() { static T INSTANCE; return &INSTANCE; }
};

template<typename T>
const Registrer<T> RegisteringClass<T>::REGISTRER;

class Something : public WhatEver, RegistringClass<Something> {
}

instance 方法在模板中时,出现以下错误 (gcc)

error: 'static const WhatEver* RegisteringClass<T>::instance() [with T = Something]' is inaccessible
static const WhatEver*instance() { static T INSTANCE; return &INSTANCE; }
error: within this context
Registry::register(T::instance);
In instantiation of 'static const WhatEver* RegisteringClass<T>::instance() [with T = Something]':

而当 instance()Something 中时,一切都很好。

我是否遗漏了一些微妙的语法?或者这是模板限制?

最佳答案

派生类时,'private'是默认的;否则,您必须为派生自的每个类使用“public”或“protected”关键字:

class C : public A, public B 
{
void f();
};

关于C++ 嵌套模板 : inaccessible static method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40784773/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com