gpt4 book ai didi

c++ - 派生类模板化时访问基本成员数据错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:21 25 4
gpt4 key购买 nike

当我尝试访问 CRTP 基类的数据成员时,奇怪的重复出现的模板出现以下问题。

template<typename T>
struct Base {
int protectedData=10;
};

struct Derived : public Base<Derived> {
public:
void method() {
std::cout<<protectedData<<std::endl;
};
};

int main ()
{
Derived a;
a.method();
}

上面的代码编译并运行良好,我可以打印“10”,但是如果我有派生类模板,比如:

template<typename T>
struct Base {
int protectedData=10;
};

template<typename T>
struct Derived : public Base<Derived<T> > {
public:
void method() {
std::cout<<protectedData<<std::endl;
};
};

class A{};

int main ()
{
Derived<A> a;
a.method();
}

A 类只是一个用作模板参数的虚拟类。但是编译器提示找不到“protectedData”。错误信息如下:

g++-4.9 test.cc -Wall -std=c++1y -Wconversion -Wextra
test.cc: In member function ‘void Derived<T>::method()’:
test.cc:26:11: error: ‘protectedData’ was not declared in this scope
cout<<protectedData<<endl;

最佳答案

它实际上与 CRTP 无关,而是与这样一个事实有关,即对于依赖基访问的派生代码,您需要限定一些东西。

将行更改为

std::cout<<this->protectedData<<std::endl;

解决了。

参见 accessing a base class member in derived class .

关于c++ - 派生类模板化时访问基本成员数据错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47258290/

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